我一直在玩KnockoutJS,绝对喜欢它通过防止东西从裂缝中掉落,从多个角度简化设计。我的问题是将数据保存回服务器的建议“最佳实践”是什么?我的理解是,在连接的MVVM中,第一个“M”是数据层,因此ViewModel触发器中的依赖关系跟踪和通知直接保存到数据层。在JavaScript应用程序中,我们断开连接并使用AJAX有选择地将其保存回服务器。在MVVM/Knockoutjs Web App中保存更改的最佳方法?
我目前正在使用它的应用程序是MVC3,我完全了解如何在控制器上编写“保存”操作,在我的页面某处放置“保存”按钮,将整个ViewModel发布到保存操作然后将其保存到数据库。但是当你做一个快速编辑然后再保存它呢?或者如果保存按钮不符合设计流程呢?相反,您希望每次在表单上进行更改时都不会发布保存按钮?我反弹的想法是:
- 每次发生任何更改时都会发布整个ViewModel,并使Action了解什么是新的和什么不是(不理想,特别是对于大型模型,如果没有否则是因为每次保存传输的数据会不必要地大)。
- 将属性添加到ViewModel中的每个项目,以跟踪自上次保存以来是否新建和/或更改。然后,grep这些项目,并只发布到服务器(我没有测试过,但我认为这可以通过使用_destroy属性来完成,就像Rails应用程序所预期的那样)。
- 将许多较小的视图模型分离为合理的视图模型,以便将前两个选项中的任何疼痛最小化(这可能无论如何都可以完成)。
- 其他一些更好的方法?
我希望有一些好的想法,我没有想到。为了能够声明性地绑定所有东西,并且仍然高效地保存会很棒。
你混为一谈MVC(如ASP.NET MVC)和MVVM。它们本质上都是相同的模式,但MVVM具有针对WPF应用程序设计的特定更改。 – Will 2011-04-15 13:02:26
其实KnockoutJS(http://knockoutjs.com)使用MVVM模式,这也是海报所指的。 – 2011-04-15 14:31:04
非常好的问题!没有Knockout的同一个问题可能会更有用,因为这只是众多JS框架中的一个。我会继续寻找这个问题的答案。 – noocyte 2012-05-04 07:50:49