Backbone.js服务器端验证和其他服务器端错误

Joh*_*ohn 11 ruby-on-rails backbone.js

当遇到服务器端错误(例如验证错误)时,如何回滚模型更改?

鉴于某些验证必须在服务器端完成,使用backbone.js(Rails后端)执行此操作的适当方法是什么?

保存骨干模型时,如果验证失败,则会触发客户端验证,从而提供适当的用户体验(该模型的视图不会更新).但是,如果服务器端验证失败,则在PUT到服务器之前,模型及其所有视图已经更新(使用无效数据).

这似乎有一些问题.

  1. 在模型经过服务器端验证之前,所有视图都会更新.例如,如果您有一个带有弹出编辑对话框的模型列表,则在调用Model.save之后但在服务器端验证和PUT之前,列表中的模型将使用可能不可验证的信息进行更新.
  2. 如果服务器返回错误(例如422错误),则不会发生模型的"回滚".不可验证的数据就像粪便一样坐在那里.这真的很糟糕.

我使用backbone.js错了吗?是否有一种众所周知的方法来处理这种(非常常见的)情景?我知道我可以对旧值等进行一些手动缓存,但这是一种有臭味的解决方案.

谢谢!

Run*_*tle 5

不知道我是否做错了(BackboneJS新手),但我遇到了同样的问题,这就是我解决它的方法:

  • 我在服务器端进行所有验证

  • 我没有做正常的model.save,而是对服务器进行标准的ajax调用,并返回包含修改模型属性的错误消息或成功消息.如果成功,我可以使用返回的属性执行model.set以更新模型和相应的视图.

  • 如果你想先做客户端验证,我想你可以用{silent:true}选项进行保存,这样就不会更新视图,然后进行ajax调用,看看需要做什么根据响应(如果错误则恢复模型的原始值,如果成功则恢复更新视图)

希望这可以帮助.

ps:这有效,但感觉不到"干净".如果有更好的解决方案,我也很乐意阅读它