MVC3 和 KnockoutJS DRYly
因此,我一直在 .Net 中使用 MVC 的方式是为每个视图创建 ViewModel。
现在,通过使用 Knockout,我可以用 javascript 而不是 C# 类创建 ViewModel 吗?然后将我的主模型(在本例中为 EF 生成的模型)作为我唯一的 C# 模型类?或者我仍然会创建一个 C# ViewModel 类以及我的 Knockout ViewModel 吗?
我正在尝试直接设置这个项目,但我不确定在这种情况下的最佳实践。
So the way I've always worked with MVC in .Net is to create ViewModels for each View.
Now, with using Knockout, would I create my ViewModels in javascript instead of a C# class? And then have my main Model(in this case, EF generated Models) as my only C# Model classes? Or would I still go about create a C# ViewModel class along with my Knockout ViewModel?
I'm trying to set this project up DRYly, but I'm not sure of best practices in this situation.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以为 C# 服务器端创建视图模型 (VM),并且仍然将它们用于 ASP.NET MVC 视图。然后也为客户端 JavaScript 视图创建虚拟机。但我最喜欢的方式是使用 MVC 视图作为页面的基础,并让模型作为 JavaScript 模型的基础。唯一的虚拟机将是 JavaScript 虚拟机,因为大部分演示实际上是在客户端完成的。换句话说,在 MVC 中进行更多静态管道操作,然后在客户端进行动态交互。
如果您主要使用 KO 等客户端 JS 库进行构建,我不会从 MVC 端的 VM 开始,除非您有充分的理由。
如果您有具体问题,我很乐意为您提供帮助。
You can create viewmodels (VMs) for the C# server side and still have them intended for the ASP.NET MVC Views. Then create VMs for the client side javascript views too. But the way I;ve liked it best is to use the MVC Views as the basis for the page, and have the Models be the basis for the JavaScript models. The only VM would then be the JavaScript VM since most of the presentation is really done client side. In other words, do the more static plumbing in MVC, then do the dynamic interaction client side.
If you are building primarily using client side JS libraries like KO I would not start with a VM for the MVC side unless you have a strong reason for it.
If you have specific questions, I'd be happy to try to help.
您应该将 Knockout 视图模型基于服务器中的视图数据,以便至少使用服务器中的数据对其进行初始化,而无需发出单独的请求来获取该数据。
您可以选择使用 映射插件 将视图数据映射到你的视图模型。
You should base your Knockout viewmodel on the view data from the server in order to at least have it initialized with data from the server without having to make a separate request to get that data.
You can optionally use the mapping plugin to map the view data to your viewmodel.