1

2 つのサブビューを持つメイン ビューがあります (DurandalJS コンポジションを使用)。現在、サブビューがまだ ajax リクエストを処理している間に、メイン ビューの viewAttached イベントが早期に発生しています。理想的には、メイン ビューのみがビューを DOM にアタッチし、構成されたすべてのサブビューのアクティブ化が完了した後にトランジションを実行します。

<h1>Hello World</h1>    
<div data-bind="compose: { model: 'viewmodels/subview1', activate: true }">Loading...</div>    
<div data-bind="compose: { model: 'viewmodels/subview2', activate: true }">Loading...</div>
4

1 に答える 1

3

これを処理する最も簡単な方法は、メイン ビューのアクティブ化中にサブビューを手動でアクティブ化することです。

サブビュー構成バインディングから activate:true を削除し、メイン VM で次のようにします。

//in main view model
var subViewModel1 = require("viewModels/subViewModel1");
var subViewModel2 = require("viewModels/subViewModel2");

function activate() {
    return $.when(
        subViewModel1.activate(),
        subViewModel2.activate()
    ).then(function () {
        //finish your main view's activation here
        ...
    });
}

メイン VM が、サブ VM のアクティブ化が完了したときにのみ解決される promise を返すことを確認してください。同様に、サブ VM は、そのサブ VM の AJAX 要求が完了したときにのみ解決される promise をアクティブ化関数が返すようにする必要があります。

Durandal Groupsに、同様の概念について議論するスレッドがあります。まだ読んでいない場合は、ドキュメント、特に質問に関連するドキュメントを少し読む価値があります。

于 2013-04-05T15:29:51.547 に答える