0

在Durandal 网站上的Master Detail 示例project.activate中,每次更改下拉列表中的项目时都会调用两次函数。

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

如果我是对的,一个明显的解决方法是替换(in index.html)这个

<!--ko compose: activeProject--><!--/ko-->

有了这个

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

但 Durandal文档在 Using Composition > Additional Settings > Activate 中说:

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

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

4

1 回答 1

0

作为一种解决方法,如何runInit在 ctor 中设置一个标志,该标志在激活期间设置为 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);
    }
};

现场版本可在http://dfiddle.github.io/dFiddle-2.0/#master-detail/so19719038

此外,我会将其作为一个问题提出https://github.com/BlueSpire/Durandal/issues?state=open以检查是否预期双重激活。

于 2013-11-01T12:53:34.997 回答