Javascript 如何在Durandal中清除视图模型
有没有一种方法可以有选择地告诉Durandal重新初始化视图模型。我了解初始化视图模型的单例方法和新实例方法Javascript 如何在Durandal中清除视图模型,javascript,singleton,durandal,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(
//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;
});
我通常不喜欢将视图模型声明为单例,但我必须在特殊情况下这样做,因为子路由需要我将数据从父路由器传递到子路由器。然而,单例还有其他的副作用,所以我想知道:有没有一种方法可以选择性地请求视图模型的新实例,即使它最初被声明为单例?据我所知,这是requirejs相对于Durandal的一个限制。一旦require加载了模块,据我所知,它将始终返回该模块的相同版本。除非有办法告诉你需要重新加载模块 我能想到的唯一一件事就是在
activate
方法期间“重置”视图模型。如果您正在更改路由,并且发现没有调用activate
方法,可能是因为Durandal认为您的模块已经处于活动状态(在这种情况下,它不会重新激活)。您可以通过自定义路由器的areSameItem
功能来更改此行为(请参阅)
希望对您有所帮助。我不知道这对您的情况是否有帮助,但您可以在视图模型中使用
activate()
方法。有关更多信息,请参阅