Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Durandal中清除视图模型_Javascript_Singleton_Durandal - Fatal编程技术网

Javascript 如何在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(

有没有一种方法可以有选择地告诉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;
});

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

据我所知,这是requirejs相对于Durandal的一个限制。一旦require加载了模块,据我所知,它将始终返回该模块的相同版本。除非有办法告诉你需要重新加载模块

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


希望对您有所帮助。

我不知道这对您的情况是否有帮助,但您可以在视图模型中使用
activate()
方法。有关更多信息,请参阅