Javascript Durandal-在主细节示例中调用两次激活
在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
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);
}
};