我对使用补丁 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/