Backbone.js获取问题(无法立即刷新数据)

时间:2011-05-18 17:15:12

标签: javascript rest backbone.js

我有这样的代码:

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());
});
  • 它仅在第二次点击后显示数据(我在第一次点击后看到的firebug中的http响应)。似乎数据没有及时刷新。

如果我将每个语句放在不同的事件中,它的工作正确。但我需要立即知道收集的时间长短。怎么做?

2 个答案:

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