我正在使用durandal和requirejs来构建我的视图模型.每次我离开视图时,我也会在组合生命周期回调方法中停用.我想在这个方法中处理我的viewmodel.
我试过删除它,这=未定义,但它们似乎不起作用.
我也使用这样的durandal事件聚合器:
self.activate = () => {
App.trigger("testEvent");
};
App.on("testEvent").then(() =>
{
alert('Event Triggered!');
});
因此,每次加载视图模型时,都会触发事件.现在,如果我离开视图,然后导航回来(因此视图模型将再次加载),然后事件将被触发两次.如果我第三次导航到视图,事件将被触发3次,依此类推.所以之前的视图模型仍然存在,这就是每个视图模型触发durandal事件的原因.因此,要解决此问题,我需要在停用时处置viewmodels,我该怎么做?
注意.有问题的视图模型是瞬态的,而不是单例.
最佳答案
Durandal还提供了一个“附加”生命周期钩子,它只在视图附加到DOM中时才会获得触发器.如果您在此处放置您的活动订阅,则他们应该只订阅一次.
http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks
编辑:
就取消订阅事件而言,如果您保存订阅的返回值,则可以在以后的停用或分离方法中调用.off
var subscription = App.on("testEvent");
...
subscription.off();
http://durandaljs.com/documentation/Leveraging-Publish-Subscribe.html