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

下一篇: Reverse tree building (with an odd number of children)