使用骨干模型,假设它从服务器获取一些其他属性(如“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发生在我之前附加处理程序?
答案 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());
}
});