您好我正在寻找一些方法在collection.fetch()
完成后立即调用SomeFunc()。像这样:
this.collection.fetch(function(){
console.log('Fetch is done so I'm going to render the view!');
})
为什么我要它:
我有一个呈现一些集合的视图。我从服务器端使用fetch()
函数从REST API获取此集合中的整个数据。在fetch()之后,我正在尝试渲染视图。但是在渲染开始时,fetch()仍未完成,因此使用空集合呈现视图。什么是Backbone
解决问题的方法?
任何进步的Thx。
答案 0 :(得分:3)
你可以通过使用jQuery的延迟对象来整理一下这个:
http://api.jquery.com/deferred.then/
this.collection.fetch().then(this.done, this.fail);
// .. somewhere else ...
done : function () {
console.log('yey');
},
fail : function () {
console.log('ney');
}
顺便说一下,我知道您可以将事件用于类似目的,但是如果您按照手册所说的那样采用表面颜色:
“请注意,不应使用fetch来填充页面加载时的集合 - 加载时所需的所有模型都应该已经被引导到位.fetch用于延迟加载不需要立即的接口的模型:例如,包含可以打开和关闭的笔记集合的文档。“
然后你可能会根据需要最终提取你的数据,可能是通过一个环绕的方法并以我演示的方式调用fetch。
答案 1 :(得分:2)
我不同意使用success
和error
回调。他们至少没有利用Backbone.Collection
的用处。你需要在任何地方使用骨干事件!看一下绑定到集合的'reset'事件,该事件在成功获取后触发。尝试在您的视图的initialize
方法中执行以下操作:
initialize: function () {
this.collection.bind('reset', this.render, this);
},
更少的代码,更清晰,并且可能是库中最有用的部分:事件!
答案 2 :(得分:0)
只需使用成功,错误回调:
this.collection.fetch({
success: function(){
console.log("Fetch is done so I'm going to render the view!");
},
error: function() {...}
})