2013-04-05 38 views
1

我有一個主視圖和兩個子視圖(使用DurandalJS組合)。現在,主視圖的viewAttached事件很早就開始了,而我的子視圖仍在處理ajax請求。理想情況下,主視圖只會將視圖附加到DOM上,並在所有組成的子視圖完成激活後運行轉換。只有在DurandalJS中激活所有組合模塊後才能附加視圖。

<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> 

回答

3

處理此問題最直接的方法是在激活主視圖的過程中手動激活子視圖。

刪除激活:從子視圖真撰寫的綁定,並在主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 
     ... 
    }); 
} 

確保您的主虛擬機將返回一個承諾,只有解決了當子虛擬機已完成其激活。同樣,子虛擬機應確保其激活函數返回一個承諾,只有當該子虛擬機的AJAX請求完成時才能解決。

有一個thread in Durandal Groups討論類似的概念。如果你還沒有,這絕對是值得一讀了對文檔一點也,具體地,這些關係到你的問題:

相關問題