2012-09-06 21 views
0

所以我有這種困境,我有一個骨幹視圖,創建一個子視圖,將被追加到主視圖。這些子視圖中的每一個都必須進行ajax調用,才能檢索數據以完成子視圖。現在超級視圖調用每個子視圖渲染並將其附加到自身。然後,我將主視圖的元素髮布到服務器,問題是我發送帖子到服務器後,ajax正在完成。有沒有更好的方式來構建異步調用這項工作?我有這個工作與同步,但負載欄甚至不顯示。我如何處理骨幹渲染和AJAX調用

因此,這裏是例子的是什麼樣:

WebView 
generate:function(){ 
    var html = new MainView().render().el 
    //ajax post to server with html 
} 

MainView 
    initalize: 
    render:function(){ 
     this.el.append(new Subview().render().el); 
    } 

Subview 
    initialize: 
    render:fucntion(){ 
     //ajax - with a success that alters the el 
     return this; 
    } 

現在生成函數完成之前,我甚至可以從電話取回數據,我不能綁定到任何東西,因爲數據已經發送到服務器。

回答

1
MainView 
childViews = []; 
renderCompletedChildViews = 0; 
addChildView: function() { 
    var subView = new SubView(); 
    this.childViews.push(subView); 
    subView.on("renderComplete", postToServer, this); 
} 
render: function() { 
    for(var i=0; i<this.childViews.length; i++) { 
     this.childViews[i].render(this.el); 
    } 
} 
postToServer: function() { 
    this.renderCompletedChildViews++; 
    if(this.renderCompletedChildViews == this.childViews.length) { 
     // Interact with server 
    } 
} 


SubView 
render: function (el) { 
    // Make an ajax call, on receiving data append the data to el passed by parent view and trigger "renderComplete" on current instance 
} 

這樣,您就完成了事件驅動和異步代碼。

+0

我迷惑了一下,我從Web視圖調用addchildview,然後渲染? –

+0

是啊!根據需要添加儘可能多的子視圖並調用渲染。它也可以從webView添加。 –

+0

謝謝,這工作完美。 –