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,名字:“Joe”,姓氏:“Schmo”}
似乎Backbone的承诺是有缺陷的,因为返回的jqXHR对象有一个承诺,在骨干完成自己的进程之前已经解决了。
是这样吗? 是否还有其他的事情需要做,以确保fetch()
返回的promise在所有Backbone的set
完成之前都不会被解析,或者至少该set
是在我的附加处理器之前发生的?
发现问题。
我的模型取代了Backbone.Model.sync。
sync: function (method, model, options) {
// Some stuff
Backbone.sync(method, model, options); // missing return
}
因为它没有return Backbone.sync()
,承诺立即解决。 如果不是为$.when()
封装fetch()
调用,即使它不是承诺,也会默认接受任何旧的东西,并且将其视为立即解决,我会抓住这一点。
你为什么不在你的获取调用中使用“成功”回调?
myModel.fetch({
success: function () {
console.log(myModel.toJSON());
}
});
链接地址: http://www.djcxy.com/p/62835.html
上一篇: Backbone JS Promises resolve before properties are set on model