backbone.js - Backbone : restore model's attributes value after a failed save with patch:true

标签 backbone.js model

我对使用补丁 HTTP 方法在主干中通过表单保存模型的实现有很大疑问。

我的问题是,如果服务器返回错误,则在下一次保存主干时将发送一个空对象作为数据,因为这些值已经在模型上设置,因此它们不会再次更改。

我的代码如下所示:

var data = $('#form').serialize();

this.model.set(data);
var attr = (this.model.hasChanged()) ? this.model.changedAttributes() : {};

this.model.save(attr,{patch: true, wait: true, error: function(model, xhr, options){
    model.set(model.previousAttributes(),{silent: true});
}});

我已经设法通过将模型的属性重新设置为之前的值来“解决”这个问题,但我感觉不对......有更好的方法来管理这种情况吗?如果可能的话,我会避免每次都将整个表单数据发送到服务器!谢谢。

编辑:a fiddle感谢 Creynders,这说明了问题。

最佳答案

我认为您的代码可以简化如下:

var data = $('#form').serialize();
this.model.save(data ,{patch: true, wait: true});

关于主干specifications , patch: true 足以仅发送服务器上更改的属性。 wait: true 提倡在请求失败时不设置模型属性。因此,保存前无需设置属性。

作为奖励,save 方法建议在发送请求之前进行模型验证。因此,如果出现任何验证错误,模型将不会更改。并且您不需要重置以前的属性。

希望我正确理解您的问题。

关于backbone.js - Backbone : restore model's attributes value after a failed save with patch:true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807070/

相关文章:

使用 Selenium2 进行性能测试 Knockout、Angular 和 Backbone - Paul Hammant 的博客

javascript - Backbone.js 查看点击事件选择器语法?

c++ - QML 动态组合框条目

java - 模型- View - Controller 后端,Java

javascript - 如何防止 Backbone 模型向集合事件传播?

javascript - 在嵌套对象中搜索文本(以 Backbone.js 集合为例)

grails - 在Grails中一个对象被两个或多个共享时,如何设置数据库模式?

php - Yii 2,Active Record类保存后未获取ID

c# - MVC XML 模型作为另一个模型的属性

javascript - backbone.js 切换模型 View