Backbone:使用patch:true保存失败后恢复模型的属性值

时间:2013-07-23 10:02:31

标签: 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});
}});

我成功地解决了#34;这可以通过将模型的属性重新设置为之前的值,但对我来说感觉不对...有没有更好的方法来管理这种情况?如果可能的话,我会避免每次都将整个表单数据发送到服务器!感谢。

编辑:fiddle显示问题,感谢Creynders。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

希望,我理解你的问题。