【问题标题】:When to use MVVM (i.e. Knockout.js) or simply return an EditorTemplate object from Controller action何时使用 MVVM(即 Knockout.js)或仅从 Controller 操作返回 EditorTemplate 对象
【发布时间】:2012-11-08 23:28:29
【问题描述】:

如果需要通过 ajax 将新项目添加到列表中,使用类似 Knockout 的最大好处是什么。

到目前为止,在我看来,我一直在做的是使用编辑器模板(带有关联的视图模型)来呈现项目列表。然后添加一个新项目,我向一个加载服务器端视图模型的操作发出请求,并返回一个刚刚附加到列表的 EditorTemplte 对象。像这样:

return Json(new { this.RenderPartialViewToString("MyEditorTemplate", model) });

淘汰的做事方式需要实现另一个视图模型来显示项目,然后另一个模板来显示它。但是这样做需要重复代码,因为视图模型必须在两个地方表示:在 cserver 端代码中,然后是淘汰视图模型的视图。这不是坏习惯吗?

我是否遗漏了什么,或者理解淘汰赛和 MVVM 的目的?

【问题讨论】:

    标签: asp.net-mvc-3 mvvm knockout.js mvc-editor-templates


    【解决方案1】:

    您将从 Knockout 中看到的最大好处是,您将不需要访问服务器即可将新项目添加到您的列表中 - 一切都发生在客户端。这有很多好处,包括:

    • 您可以减少服务器上的负载。
    • 您改善了最终用户的体验。
    • 您可以使页面上的多个元素与您的模型保持同步,而无需任何服务器交互。

    在这些 Knockout 教程中可以找到两个很好的例子:

    就复制代码而言,如果您查看这两个教程,您会发现您不需要复制代码。例如:

    1. 创建一个视图以显示整个列表。
    2. 要向列表中添加新项目,请创建在向页面添加新项目时加载的局部视图 - 该局部视图绑定到 Knockout
    3. 当您提交整个表单时,该列表中的所有内容都将被提交 - 包括您通过 Knockout 添加的那些项目。

    您的 ViewModel 将特定于您的列表项(您不一定需要为所有内容创建完整的 ViewModel)。而且您的视图特定于单个列表项。

    希望这很清楚。 Knockout 非常简单,他们有一些很棒的文档和教程可以帮助您前进。

    【讨论】:

    • 谢谢。这些例子很有帮助。我想当从服务器端到客户端时(比如示例使用 $.map 函数时),没有办法不必做一些映射。我理解这是如何组合在一起的,但是担心服务器端定义发生变化时会发生什么是合理的担忧吗?它会破坏它所使用的任何视图上的所有映射。
    • 我不确定我理解您所说的“服务器端定义更改”是什么意思。典型的方法是:将您的数据发送到您的视图(从服务器),使用 Knockout 映射到对象(手动或使用 Knockout Mapper),用户进行任何更新(全部完成客户端),将数据发送回您的服务器以便您可以保留更改,显示下一个视图 ||你还有什么想做的吗?
    • 我所说的“服务器端定义更改”的意思是说我的服务器视图模型添加了一个属性,然后我还必须更新来自该视图模型的剔除映射的任何屏幕。跨度>
    • @getit - 啊,是的。根据您使用 KO 的方式,这可能是正确的。然而,关于 KO 的一件事是,您不一定需要让 KO 的 VM 100% 与您服务器上的内容保持同步。例如,也许您只使用 KO 来影响单个动态列表。仅仅因为您将其他项目添加到您的主 VM 并不意味着您甚至需要触摸 KO。其中很大一部分在于您如何设计解决方案。它不一定是直接的一对一。
    【解决方案2】:

    恕我直言,以下是淘汰赛和 asp mvc 混合在一起的架构的最干净的选择。

    让您的 ASP.net 充当 Web 服务,并控制您的所有视图模板和逻辑。

    否则,是的,可能会复制视图模型,并且在您需要更改模型时必须重构前端和后端代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多