我有这样的代码:
var MyModel = Backbone.Model.extend();
var MyCollection = Backbone.Collection.extend({
url: '/url/',
model: MyModel
});
var coll = new MyCollection();
网址正确并返回正确的json。但是,如果我尝试使用下一个代码:
$('#fetch').click(function(){
coll.fetch();
console.log(coll.toJSON());
});
如果我将每个语句放在不同的事件中,它的工作正确。但我需要立即知道收集的时间长短。怎么做?
答案 0 :(得分:24)
请记住fetch
是对服务器的异步调用。要使代码按预期工作,请创建一个success
函数,Backbone.Collection
函数在从服务器刷新其内容后可以调用:
$('#fetch').click(function(){
coll.fetch({
succcess: function() {
console.log(coll.toJSON());
}
});
});
显然你的应用程序不需要真正调用console.log
所以更真实的例子会像这样使用backbone的事件绑定:
coll.bind('refresh', someFunction);
coll.fetch();
通过这种方法,骨干将在集合刷新时调用someFunction
。这非常有用,尤其是当someFunction
是要绑定集合的视图的render
函数时。
coll.bind('refresh', yourView.render);
coll.fetch();
答案 1 :(得分:6)
从版本0.5.0开始,Collection.refresh被重命名为Collection.reset。
所以在安德鲁的回答中(我觉得非常有用):
coll.bind('refresh', someFunction);
变为
coll.bind('reset', someFunction);