如何在遇到服务器端错误(例如验证错误)时回滚模型更改?
鉴于必须在服务器端进行某些验证,使用backbone.js(Rails后端)执行此操作的适当方法是什么?
保存骨干模型时,如果验证失败,则会触发客户端验证,从而提供适当的用户体验(该模型的视图不会更新)。但是,如果服务器端验证失败,则在PUT到服务器之前,模型及其所有视图都已更新(使用无效数据)。
这似乎有一些问题。
我使用backbone.js错了吗?是否有一种众所周知的方法来处理这种(非常常见的)情景?我知道我可以对旧值进行一些手动缓存等,但这是一种有臭味的解决方案。
谢谢!
答案 0 :(得分:5)
不知道我是否做错了(BackboneJS的新手),但我遇到了同样的问题,这就是我解决它的方法:
我在服务器端执行所有验证
我没有进行正常的model.save,而是对服务器进行标准的ajax调用,并返回包含已修改模型属性的错误消息或成功消息。如果成功,我可以使用返回的属性执行model.set,以便更新模型和相应的视图。
如果你想先做客户端验证,我想你可以用{silent:true}选项进行保存,这样就不会更新视图,然后进行ajax调用,看看有什么需要根据响应完成(如果错误则恢复模型的原始值或如果成功则更新视图)
希望这有帮助。
ps:这有效,但感觉不到“干净”。如果有更好的解决方案,我也很乐意阅读它
答案 1 :(得分:0)
我要做的是在服务器端确保捕获任何错误,然后从数据库返回原始记录的响应查询,并将其作为JSON返回以及错误响应。然后你可以这样做:
model.save({}, {
error: function(model, response){
model.set(response);
}
});
假设您的观点正在观察模型上的更改事件,它们将相应地更新。