有没有办法有选择地告诉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;
});
我通常不喜欢将视图模型声明为单例,但由于子路由需要我将数据从父路由器传递到子路由器,因此我必须在特殊情况下执行此操作。但是,单例有其他副作用,所以我想知道:有没有办法有选择地请求视图模型的新实例,即使它最初被声明为单例?
答案 0 :(得分:0)
不是我所知道的 - 尽管如此,这更多地是针对requirejs和Durandal的限制。一旦require已加载模块,据我所知,它将始终返回该模块的相同版本。除非有办法告诉要求重新加载模块吗?
我唯一能想到的就是在activate
方法中“重置”视图模型。如果您正在更改路由并发现未调用activate
方法,则可能是因为Durandal认为您的模块已经处于活动状态(在这种情况下它将不会重新激活)。您可以通过自定义路由器的areSameItem
功能来更改此行为(请参阅this question for an explanation)。
希望有所帮助。
答案 1 :(得分:0)
我不知道它是否对您的情况有帮助,但您可以在视图模型中使用activate()
方法。有关详细信息,请参阅http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks。