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

Ada*_*son 7 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());
});
Run Code Online (Sandbox Code Playgroud)

输出:

{id:10}

片刻后输出:

{id:10,名字:"Joe",姓氏:"Schmo"}

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

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

Ada*_*son 6

发现了这个问题.

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

    sync: function (method, model, options) {
                    // Some stuff
        Backbone.sync(method, model, options); // missing return
    }
Run Code Online (Sandbox Code Playgroud)

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