0

Durandal Web サイトのMaster Detail サンプルではproject.activate、​​ドロップダウン リストでプロジェクトを変更するたびに関数が 2 回呼び出されます。

最初のアクティベーションは のwriteメソッドで呼び出されActivatorます。2 番目のアクティベーションは で呼び出されcomposition.bindAndShowます。

私が正しければ、明らかな修正はindex.htmlこれを(で)置き換えることです

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

これとともに

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

ただし、Durandalのドキュメントには、コンポジションの使用 > 追加設定 > アクティブ化で次のように記載されています。

注: アクティベーターを使用している場合、アクティベーターはアクティベーション コールを制御するため、compose バインディングを介して操作しようとしないでください。

だから私はそれをすべきではありません。これを修正する適切な方法は何ですか?

4

1 に答える 1

0

回避策として、runInitアクティブ化中に false に設定されるフラグを ctor に設定するのはどうですか?

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 に答える