1

在需要通过 ajax 将新项目添加到列表中的情况下,使用 Knockout 之类的最大好处是什么。

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

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

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

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

4

2 回答 2

2

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

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

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

至于复制代码,如果您查看这两个教程,您会注意到您不需要复制代码。例如:

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

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

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

于 2012-11-20T21:34:36.653 回答
1

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

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

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

于 2012-11-21T06:04:56.173 回答