gpt4 book ai didi

javascript - 停用后如何在 Durandal 中处理 View 模型

转载 作者:搜寻专家 更新时间:2023-11-01 04:22:43 26 4
gpt4 key购买 nike

我正在使用 durandal 和 requirejs 来组成我的 View 模型。每次离开 View 时,我也会连接到合成生命周期回调方法 deactivate。我想用这种方法处理我的 View 模型。

我试过delete this, this = undefined 但它们似乎不起作用。

我也像这样使用 durandal 事件聚合器:

self.activate = () => {
App.trigger("testEvent");
};

App.on("testEvent").then(() =>
{
alert('Event Triggered!');
});

所以每次加载viewmodel,都会触发事件。现在,如果我导航离开 View ,然后导航回来(因此 View 模型将再次加载),那么该事件将被触发两次。如果我第 3 次导航到 View ,事件将被触发 3 次,依此类推。所以以前的 View 模型仍然存在,这就是每个 View 模型触发 durandal 事件的原因。因此,要解决此问题,我需要在停用中处理 View 模型,我该怎么做?

注意。有问题的 View 模型是 transient 的,而不是单例的。

最佳答案

Durandal 还提供了一个“附加的”生命周期 Hook ,只有当 View 附加到 DOM 中时才会触发。如果您将事件订阅放在此处,它们应该只会订阅一次。

http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks

编辑:

就取消订阅事件而言,如果您保存订阅的返回值,您可以稍后在停用或分离方法中调用 .off

var subscription = App.on("testEvent");
...
subscription.off();

http://durandaljs.com/documentation/Leveraging-Publish-Subscribe.html

viewmodel 本身只是一个托管的 javascript 对象,在所有对它的引用消失后将自动销毁。

关于javascript - 停用后如何在 Durandal 中处理 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41463010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com