我有这样的代码:

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响应是在第一次单击后看到的)。似乎数据没有及时刷新。

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

    最佳答案

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

    $('#fetch').click(function(){
        coll.fetch({
            succcess: function() {
                console.log(coll.toJSON());
            }
        });
    });
    

    显然,您的应用无需真正调用console.log,因此,更真实的示例将使用主干的事件绑定(bind),如下所示:
    coll.bind('refresh', someFunction);
    coll.fetch();
    

    通过这种方法, Backbone 将在集合刷新时调用someFunction。当someFunction是要绑定(bind)集合的 View 的render函数时,这尤其有用。
    coll.bind('refresh', yourView.render);
    coll.fetch();
    

    10-05 20:50
    查看更多