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

And*_*rew 14 javascript rest backbone.js

我有这样的代码:

var MyModel = Backbone.Model.extend();

var MyCollection = Backbone.Collection.extend({
    url: '/url/',
    model: MyModel
});
var coll = new MyCollection();
Run Code Online (Sandbox Code Playgroud)

网址是正确的,并返回正确的json.但是,如果我尝试使用下一个代码:

$('#fetch').click(function(){
    coll.fetch();
    console.log(coll.toJSON());
});
Run Code Online (Sandbox Code Playgroud)
  • 它只在第二次点击后显示数据(我在第一次点击后看到firebug中的http响应).似乎数据没有及时刷新.

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

And*_*are 24

请记住,这fetch是对服务器的异步调用.要使代码按预期工作,请创建一个可以在从服务器刷新其内容后调用的success函数Backbone.Collection:

$('#fetch').click(function(){
    coll.fetch({
        succcess: function() {
            console.log(coll.toJSON());
        }
    });    
});
Run Code Online (Sandbox Code Playgroud)

显然你的应用程序不需要真正调用,console.log所以一个更真实的世界示例将使用骨干的事件绑定,如下所示:

coll.bind('refresh', someFunction);
coll.fetch();
Run Code Online (Sandbox Code Playgroud)

使用这种方法,骨干将someFunction在集合刷新时调用.这非常有用,尤其是当您想要绑定集合的视图someFunctionrender功能时.

coll.bind('refresh', yourView.render);
coll.fetch();
Run Code Online (Sandbox Code Playgroud)

  • 不确定这是否是一个重新发生的变化,但你现在似乎需要绑定到'重置'而不是'刷新'. (5认同)

Pie*_*tro 6

从版本0.5.0开始,Collection.refresh被重命名为Collection.reset.

所以在安德鲁的回答中(我觉得非常有用):

coll.bind('refresh', someFunction);
Run Code Online (Sandbox Code Playgroud)

coll.bind('reset', someFunction);
Run Code Online (Sandbox Code Playgroud)