7

使用骨干模型,假设它从服务器获取一些附加属性(如“FirstName”和“LastName”),我有如下内容:

var myModel = new Backbone.Model({ id: 10 });
var myOtherModel = new Backbone.Model({ id: 20 });
$.when(myModel.fetch(), myOtherModel.fetch()).done(function () {
    console.log(myModel.toJSON());
});

输出:

{编号:10}

片刻之后的输出:

{ id: 10, FirstName: "Joe", LastName: "Schmo" }

Backbone 的承诺似乎存在缺陷,因为返回的 jqXHR 对象有一个承诺,该承诺在骨干完成自己的进程之前就已解决。

是这样吗?是否必须做其他事情来确保在完成fetch()所有 Backbone 的sets 或至少sets 发生在我附加的处理程序之前不会解决返回的承诺?

4

2 回答 2

6

发现问题。

我获取的模型覆盖了 Backbone.Model.sync。

    sync: function (method, model, options) {
                    // Some stuff
        Backbone.sync(method, model, options); // missing return
    }

因为它没有return Backbone.sync()立即解决承诺。$.when()如果不是因为包装电话,我会抓住这一点fetch(),它会默默地接受任何旧的东西,即使它不是一个承诺,并且只是将它视为立即解决。

于 2012-08-21T15:35:55.770 回答
-2

为什么不在 fetch 调用中使用“成功”回调?

myModel.fetch({
  success: function () {
    console.log(myModel.toJSON());
  }
});
于 2012-08-21T15:34:08.907 回答