Backbone Model.save返回undefined而不是jqxhr

时间:2014-09-02 08:14:28

标签: javascript backbone.js promise jquery-deferred jqxhr

编辑1 :此问题不再有效。有关详细信息,请查看此问题末尾的编辑#2。

骨干文档说Backbone.Model.save函数在验证成功时返回jqXHR对象,否则返回false。因此,如果未定义验证方法,则model.save方法应返回jqXHR,但它实际上返回' undefined'。 model.fetch工作正常并返回一个jqXHR对象。

jqXHR对象可用于与其他自定义对象链接。我在多个模型上调用保存,并希望在所有保存方法完成后更新UI。我想做像

这样的事情
$.when(promise1,promise2,.....)
.done().then(function(){
   /* some callback code here */
})

以下是文档说的内容

  

保存 model.save([attributes],[options])
  通过委托Backbone.sync将模型保存到数据库(或替代持久层)。如果验证成功则返回jqXHR,否则返回false。

这是我的代码

var x = new Backbone.Model();
x.url = "/a/valid/url";
var y = x.save({key1: "value1"});
var z = x.fetch();
console.log(typeof(y));
console.log(typeof(z));

控制台输出

undefined
a jqXHR object

不记录jqXHR对象,而是记录" undefined"到控制台。有人可以帮我这个吗?

编辑2 :我忘了提到我在我的代码中覆盖了Backbone.sync方法,并且在我的重写方法中,我没有返回任何内容。由于model.save委托给Backbone.sync(或它自己的自定义同步方法),因此save方法返回' undefined'。

1 个答案:

答案 0 :(得分:4)

我忘了提到我在我的代码中覆盖了Backbone.sync方法,而在我的重写方法中,我没有返回任何内容。由于model.save委托给Backbone.sync,因此save方法返回' undefined'。我更正了我的代码以返回jqXHR对象。现在一切都运行良好。