collection.fetch()在view.render()之后工作

时间:2013-12-18 10:24:41

标签: backbone.js

您好我正在寻找一些方法在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。

3 个答案:

答案 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)

我不同意使用successerror回调。他们至少没有利用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() {...}
})