【问题标题】:Are the views/models of knockoutjs or similar libraries supposed to replace asp.net mvc views/models? [closed]是否应该替换 asp.net mvc 视图/模型的 knockoutjs 或类似库的视图/模型? [关闭]
【发布时间】:2011-10-16 23:45:37
【问题描述】:
在查看了 knockoutjs 之后,看起来您直接在页面中定义了视图和模型。例如,您的 cshtml 文件能否共享 asp.net mvc 视图和 knockoutjs 视图。看起来如果您的应用程序不是 javascript 密集型,则无需使用 knockoutjs 或类似的东西。我看错了吗? knockoutjs 框架是否替换了您的 asp.net mvc 框架视图/模型?
【问题讨论】:
标签:
asp.net
asp.net-mvc
knockout.js
【解决方案1】:
Knockoutjs 是客户端 MVVM 框架。它的一般目的是摆脱直接使用那些“onclick”、“onchange”、“onblur”事件处理程序,并以 MVVM 模式定义的方式处理 UI——通过模型。来自Knockoutjs.com:
通过将数据和行为封装到视图模型中,您可以获得一个干净、可扩展的基础,在此基础上构建复杂的 UI,而不会迷失在事件处理程序和手动 DOM 更新的混乱中。
我同意您的观点,如果您的客户端只需填写一些简单的表格并提交到服务器,那么使用 knockoutjs 可能是设计开销。但是如果有计算、UI 更新、依赖输入应该与彼此的选定值同步操作,knockoutjs 提供了更简洁的方式来在 UI 上实现所需的结果。
但这些都是客户端问题。它们并不是要替换服务器端的模型。您需要服务器端的模型来执行存储库操作、业务验证和案例。好的服务器从不依赖于客户端的任何东西——它是独立的参与者,它完成了应用程序所需的所有事情。由于 knockoutjs 是让您在客户端处理模型的库,因此在 asp.net mvc 中,视图模型是在服务器上定义的,以简化服务器特定的操作。从技术上讲,对于当前版本的 asp.net mvc,您需要视图模型来生成 knockoutjs 模型。因此,如果您需要为 Web 编写服务器端,则需要在其上使用单独的模型。从设计上讲,它们可能类似于淘汰赛的那些,但它们不能相互替换。
对于视图 - 比较 asp.net mvc 视图和 knockoutjs 视图是错误的。 knockoutjs 视图只是 asp.net mvc 定义的一般“视图”的具体实现。 asp.net mvc 没有为“视图”定义任何特定的内容,它通常是用户在与服务器进行一些交互后在浏览器上收到的内容。是的,如果你使用 knockoutjs,那么你生成的视图当然会包含 knockoutjs 特定的标记。