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

时间:2011-04-14 23:59:27

标签: ajax mvvm save knockout.js

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

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

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

我希望有一些我没有想过的好主意。能够以声明方式绑定所有内容并仍然有效地保存 会很棒。

3 个答案:

答案 0 :(得分:5)

我刚从Mix11回来,在那里我参加了关于Knockout.js的this session。看史蒂夫·桑德森(Steve Sanderson)制作一个完整的CRUD演示版可能是值得的。

答案 1 :(得分:0)

我唯一能想到的是subscribing。当我第一次开始阅读你的帖子时,我正在考虑标志w / grep。

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

Here's一个工作实例..

唯一要做的就是检测“保留”值的值的变化。你很顺利。

答案 2 :(得分:0)

你可以查看Knockout的Mapping插件,它可以让你从JSON数组加载Knockout。如果它不是太大,则在计时器上(或更改后)将该数组保存到服务器。希望这有帮助,对不起,如果你已经知道这一点。

http://knockoutjs.com/documentation/plugins-mapping.html

http://knockoutjs.com/documentation/json-data.html