Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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_Durandal_Durandal 2.0 - Fatal编程技术网

Javascript Durandal-在主细节示例中调用两次激活

Javascript Durandal-在主细节示例中调用两次激活,javascript,durandal,durandal-2.0,Javascript,Durandal,Durandal 2.0,在Durandal网站上,当我在下拉列表中更改项目时,project.activate功能每次被调用两次 第一次激活在Activator的write方法中调用。在composition.bindAndShow中调用第二个激活 如果我是对的,一个明显的修复方法就是(在index.html中)替换这个 用这个 <!--ko compose: { model: activeProject, activate: false }--><!--/ko--> 但是Durand

在Durandal网站上,当我在下拉列表中更改项目时,
project.activate
功能每次被调用两次

第一次激活在
Activator
write
方法中调用。在
composition.bindAndShow
中调用第二个激活

如果我是对的,一个明显的修复方法就是(在
index.html
中)替换这个


用这个

<!--ko compose: { model: activeProject, activate: false }--><!--/ko-->

但是Durandal在使用合成>附加设置>激活时说:

注意:如果您使用的是激活器,它将控制激活调用,您不应该试图通过compose绑定来操作它


所以我不应该那样做。解决此问题的正确方法是什么?

作为一种解决方法,在ctor中设置
runInit
标志如何,该标志在激活期间设置为false

var ctor = function(name, description) {
    this.runInit = true;
    this.name = name;
    this.description = description;
};


ctor.prototype.activate = function() {
    if (this.runInit){
        this.runInit = false;
        system.log('Model Activating', this);
    }
};
直播版可于


此外,我还提出了一个问题,以检查双重激活是否是预期的。

我目前正在做类似的事情,但我阻止了第一次激活,并允许第二次激活(来自合成),因为它与敲除效果更好。缺点是我必须在每个受影响的viewmodel中这样做。插件解决方案会更好。。。如果你知道如何在插件中做到这一点(阻止激活器的激活),我很乐意听到!话虽如此,我现在仍然需要激活剂去激活,将来可能还需要更多。只是不需要它的activate invoke:)如上所述,我不确定您看到的行为是否是设计的。最好把它作为一个问题提出来。
var ctor = function(name, description) {
    this.runInit = true;
    this.name = name;
    this.description = description;
};


ctor.prototype.activate = function() {
    if (this.runInit){
        this.runInit = false;
        system.log('Model Activating', this);
    }
};