javascript – 如何在停用后丢弃Durandal中的viewmodel

前端之家收集整理的这篇文章主要介绍了javascript – 如何在停用后丢弃Durandal中的viewmodel前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用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

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

猜你在找的JavaScript相关文章