如何在Durandal中清除视图模型

时间:2014-03-15 00:08:08

标签: javascript singleton durandal

有没有办法有选择地告诉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;
});

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

2 个答案:

答案 0 :(得分:0)

不是我所知道的 - 尽管如此,这更多地是针对requirejs和Durandal的限制。一旦require已加载模块,据我所知,它将始终返回该模块的相同版本。除非有办法告诉要求重新加载模块吗?

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

希望有所帮助。

答案 1 :(得分:0)

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