【问题标题】:How to clear view model in Durandal如何在 Durandal 中清除视图模型
【发布时间】:2014-08-21 18:03:50
【问题描述】:

有没有办法选择性地告诉 Durandal 重新初始化视图模型。我知道初始化视图模型的单例与新实例方法。

//singleton since a declared object is returned
define(function() {
    return { prop1: 1, prop2: 2 }
});

//new instance since a constructor is returned
define(function() {

var ctor = function(){};

    return ctor;
});

我通常不喜欢将视图模型声明为单例,但我必须在特殊情况下这样做,因为子路由需要我将数据从父路由器传递到我的子路由器。但是,单例还有其他副作用,所以我想知道:有没有办法选择性地请求视图模型的新实例,即使它最初被声明为单例?

【问题讨论】:

    标签: javascript singleton durandal


    【解决方案1】:

    据我所知,这更多是 requirejs 与 Durandal 的限制。一旦 require 加载了模块,据我所知,它总是会返回该模块的相同版本。除非有办法告诉 require 重新加载模块?

    我唯一能想到的就是在activate 方法期间“重置”视图模型。如果您正在更改路由并发现 activate 方法没有被调用,这可能是因为 Durandal 认为您的模块已经处于活动状态(在这种情况下它不会重新激活)。您可以通过自定义路由器的areSameItem 函数来更改此行为(请参阅this question for an explanation)。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      我不知道它对您的情况是否有帮助,但您可以在视图模型中使用 activate() 方法。如需更多信息,请参阅http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks

      【讨论】:

        猜你喜欢
        • 2016-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多