2

我对使用 patch 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});
}});

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

编辑:一个显示问题的小提琴,感谢 Creynders。

4

1 回答 1

2

我想你的代码可以简化如下:

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

关于骨干规格patch: true仅在服务器上发送更改的属性就足够了。wait: true在请求失败的情况下促进不设置模型属性。因此,无需在保存前设置属性。

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

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

于 2013-07-23T14:06:51.037 回答