2013-08-03 178 views

回答

0

好吧,如果你希望在完成異步任務做一些事情,你可以使用的承諾。例如與jQuery

$.when(myAsyncTask()) 
.then(function(){ 
    console.log("Executed when myAsyncTask() is done.."); 
}); 

如果你只是想要做的事,當收集的數據是成功地獲取,使用的Backbone.Collection.fetch()

myCollection.fetch({ 
    success: function(data){ 
    console.log("Your Collection data is available now."); 
    } 
}); 
+0

我知道Collections的成功回調,但是你知道這個函數'$(this.el).html(this.template())'的任何方法。在'@ collection.each(@appendEntry) '被稱爲 – user2495030

+0

之前,該函數有時無法正確完成。您確定它不是您的模板方法,它不會給您正確的結果嗎?在我看來,.html()是同步的 – axelcdv

+0

模板方法返回正確的模板,因爲我在那裏放了一些虛擬的'HTML'。但是,然後'appendentry'方法被立即調用並試圖將'append'元素添加到該HTML中,但是它不能夠加載,因爲在調用appendentry時未加載HTML – user2495030

0

$(this.el).html()success()回調方法(或者,更簡潔,this.$el.html() )是一個同步函數調用。在該函數完成之前,不會執行其他Javascript代碼。

this.$el.html(this.template()); 
this.collection.each(this.appendEntry); 

將按順序執行這兩個語句。

您是否偶然以某種方式覆蓋了下劃線template()函數,在這種情況下this.template()已轉變爲異步調用?如果是這樣,您需要添加對您的模板代碼的回調支持,並推遲執行html(),直到它完成。

相關問題