Backbone JS Promises在模型上设置属性之前解析

时间:2012-08-21 14:30:03

标签: javascript jquery backbone.js

使用骨干模型,假设它从服务器获取一些其他属性(如“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());
});

输出:

  

{id:10}

片刻后输出:

  

{id:10,FirstName:“Joe”,姓氏:“Schmo”}

似乎Backbone的承诺存在缺陷,因为返回的jqXHR对象具有在骨干完成其自己的过程之前已经解决的承诺。

是这样的吗?还有其他必须做的事情来确保fetch()返回的承诺在所有Backbone的set完成之前都没有得到解决,或者至少set s发生在我之前附加处理程序?

2 个答案:

答案 0 :(得分:6)

发现了这个问题。

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

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

因为它没有return Backbone.sync()承诺立即得到解决。如果不是$.when()包裹fetch()调用,我会抓住这个,它会默默地接受任何旧的东西,即使它不是一个承诺,只是立即将其视为已解决。

答案 1 :(得分:-2)

为什么不在提取电话中使用“成功”回调?

myModel.fetch({
  success: function () {
    console.log(myModel.toJSON());
  }
});