knockoutjs或类似库的视图/模型是否应该取代asp.net mvc视图/模型?

Xai*_*oft 2 asp.net asp.net-mvc knockout.js

在查看knockoutjs后,您可能会直接在页面中定义视图和模型.例如,您的cshtml文件可以共享asp.net mvc视图和knockoutjs视图.看起来如果你的应用程序不是javascript密集型的,就没有必要使用knockoutjs或类似的东西.我是以错误的方式看待这个吗?knockoutjs框架是否取代了你的asp.net mvc框架视图/模型?

arc*_*hil 5

Knockoutjs是客户端MVVM框架.它的一般目的是直接使用那些"onclick","onchange","onblur"事件处理程序,并以MVVM模式定义它的方式与UI一起行动 - 通过模型.来自Knockoutjs.com:

通过将数据和行为封装到视图模型中,您可以获得一个干净,可扩展的基础,可以在其中构建复杂的UI,而不会在错误的事件处理程序和手动DOM更新中丢失.

我同意你的意见,如果你的客户端只是填写并提交给服务器的简单表格,使用knockoutjs可能是设计开销.但是如果有计算,UI更新,相关输入应该与彼此的选定值同步,则knockoutjs提供了更简洁的方式来在UI上实现所需的结果.

但这些都是客户方面的问题.它们并不是要替换服务器端的模型.您需要服务器端的模型来执行存储库操作,业务验证和案例.好的服务器永远不会依赖于客户端上的任何东西 - 它是独立的角色,可以完成应用程序所需的所有功能.由于knockoutjs是使您在客户端使用模型的库,因此在asp.net mvc viewModels中定义服务器以简化服务器特定的操作.从技术上讲,对于当前版本的asp.net mvc,你需要视图模型来生成knockoutjs.因此,如果您需要为Web编写服务器端,则需要在其上使用单独的模型.根据设计,它们可能像淘汰赛一样,但它们不能相互替换.

对于视图 - 比较asp.net mvc视图和knockoutjs视图是错误的.knockoutjs视图只是asp.net mvc定义的一般"视图"的具体实现.asp.net mvc没有定义任何特定于"view"的内容,它通常是用户在与服务器进行一些交互后在其浏览器上收到的内容.是的,如果你使用knockoutjs,那么你生成的视图当然会包含knockoutjs特定的标记.