我对使用补丁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。
答案 0 :(得分:2)
我认为您的代码可以简化如下:
var data = $('#form').serialize();
this.model.save(data ,{patch: true, wait: true});
关于骨干specifications,patch: true
足以仅在服务器上发送更改的属性。 wait: true
促使在请求失败时不设置模型属性。因此,在保存之前无需设置属性。
作为奖励,save
方法建议在发送请求之前进行模型验证。因此,如果出现任何验证错误,模型将不会发生变化。而且您无需重置以前的属性。
希望,我理解你的问题。