2013-11-01 55 views
0

在Durandal網站上Master Detail sampleproject.activate函數每次在下拉列表中更改項目時調用兩次。Durandal - 激活在主詳細示例中調用兩次

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

如果我是正確的,一個顯而易見的解決將被更換(以index.html)這個

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

與此

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

但迪朗達爾documentation說,在使用組成>其他設置>激活:

注意:如果您使用激活器,它將控制激活調用你不應該試圖通過組合綁定來操縱它。

所以我不應該那樣做。什麼是解決這個問題的正確方法?

回答

0

作爲一種解決方法,在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檢查,如果雙啓動,預計與否。

+0

我現在正在做一些simillar,但我阻止了第一次激活,並允許第二次激活(來自組合),因爲它與Knockout更好地工作。缺點是我必須在每個受影響的視圖模型中這樣做。插件解決方案會更好...如果你知道如何做到這一點(從激活塊激活)在插件我很想聽! – Pol

+0

說了我現在仍然需要Activator去激活,以後可能還需要更多。只是不需要它激活調用:) – Pol

+0

如上所述,我不知道你看到的行爲是否是設計。最好把它作爲一個問題提出來。 – RainerAtSpirit