【问题标题】:Durandal - activation invoked two times in Master Detail sampleDurandal - 在 Master Detail 示例中调用了两次激活
【发布时间】:2013-11-01 20:53:34
【问题描述】:

在 Durandal 网站的Master Detail sample 中,当我在下拉列表中更改项目时,每次调用project.activate 函数两次。

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

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

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

有了这个

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

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

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

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

【问题讨论】:

    标签: javascript durandal durandal-2.0


    【解决方案1】:

    作为一种解决方法,如何在 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);
        }
    };
    

    http://dfiddle.github.io/dFiddle-2.0/#master-detail/so19719038提供实时版本

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

    【讨论】:

    • 我目前正在做类似的事情,但我阻止了第一次激活并允许第二次激活(来自组合),因为它与 Knockout 配合得更好。缺点是我必须在每个受影响的视图模型中都这样做。插件解决方案会更好...如果您知道如何在插件中执行此操作(阻止激活器激活),我很乐意听到!
    • 话虽如此,我现在仍然需要激活器来停用,将来可能还会需要更多。只是不需要它的激活调用:)
    • 如上所述,我不确定您看到的行为是否是设计使然。最好将其作为一个问题提出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2014-07-01
    • 2014-09-22
    • 2015-07-01
    • 1970-01-01
    相关资源
    最近更新 更多