2013-08-03 219 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(),直到它完成。

相关问题