保存MVVM/Knockoutjs Web App更改的最佳方法?

Jor*_*rin 9 ajax save mvvm knockout.js

我一直在玩KnockoutJS并且非常喜欢它通过防止物质从裂缝中掉落而从各个角度简化设计.我的问题是将数据保存回服务器的推荐"最佳实践"是什么?我的理解是,在连接的MVVM中,第一个"M"是数据层,因此ViewModel触发器中的依赖关系跟踪和通知直接保存回数据层.在JavaScript应用程序中,我们断开连接并使用AJAX有选择地保存回服务器.

我正在使用它的应用程序是MVC3,我绝对得到如何在我的控制器上编写"保存"操作,在我的页面上的某个地方放置一个"保存"按钮,将整个ViewModel发布到该Save操作,然后坚持到数据库.但是当你进行快速编辑然后再次保存时呢?或者如果保存按钮不适合设计流程怎么办?相反,您希望每次在没有保存按钮的表单上进行更改时发布到操作?我反复提出的想法是:

  • 每次进行任何更改时都会发布整个ViewModel,并使Action知道什么是新的和什么不是(不理想,特别是对于大型模型,如果没有别的,因为每次保存时传输的数据会不必要地大).
  • 向ViewModel中的每个项添加一个属性,用于跟踪自上次保存以来它是否是新的和/或已更改.然后,grep out那些项目并仅将这些项目发布到服务器(我没有测试过这个,但我认为这可以使用_destroy属性完成,就像Rails应用程序一样).
  • 分成尽可能多的较小的ViewModel,这样前两个选项的任何痛苦都会被最小化(这可能无论如何都应该这样做).
  • 其他一些更好的方法?

我希望有一些我没有想过的好主意.能够声明性地绑定所有内容并且仍然有效地保存将是非常棒的.

小智 5

我刚从Mix11回来,在那里我参加了关于Knockout.js的会议.看史蒂夫桑德森制作一个完整的CRUD演示可能是值得的.

  • 是的,我实际上在上周发布了这个精彩的演示版.一个真正伟大的演示,展示了Knockout在客户端可以做什么,但当他发布到服务器时,它没有做任何事情,除了将它转发回客户端以显示它实际上是去服务器.在将增量更改保存到服务器时,我更感兴趣的是最佳实践...同时保持有效负载小,控制器高效. (3认同)

Dav*_*ick 0

我唯一能想到的就是订阅。当我第一次开始阅读你的文章时,我正在考虑使用 grep 标记。

编辑:更好的是,ko.utils.compareArrays看起来很有希望。

这是一个工作示例..

剩下要做的唯一一件事就是检测“保留”值的变化。不过你已经在路上了。

  • 示例链接已损坏...该示例是否仍然可用?我有一个具有多个关系级别的视图模型,并且我一直在寻找不同的保存选项 (3认同)