我使用带有剃刀视图引擎的.net MVC开发了应用程序.最近我正在使用knockoutjs用于MVC应用程序.
从10000英尺的鸟瞰图中,我看到两种方法都具有相似的双向绑定机制.
在第一种用于绑定模型的razor语法中,在第二种方法中,我们使用knockout数据绑定属性.
我的理解是,为什么很多人现在更喜欢Knockout和最近的所有嗡嗡声.在淘汰库中替换razor语法有什么主要优势吗?
他们彼此无关.
顾名思义,它使用MVC(模型视图控制器)技术.这意味着您拥有一个模型(所有业务逻辑),可用于创建视图模型以呈现视图(通过使用剃刀模板).浏览器可以将数据发布到控制器,控制器通常会通过创建新的视图模型来呈现新视图,并将其作为响应发送到浏览器.
因此,该技术基本上使用浏览器向服务器发送GET或POST请求,服务器以渲染视图进行应答.它可以直接使用,也可以使用AJAX.(ASP.NET MVC更通用,可以做更多的渲染视图,但这是基本的想法).
因此,ASP.NET MVC涉及所有操作中的服务器:它必须实例并使用控制器,执行操作并将其结果作为响应发送到浏览器.
昏死在以下几个方面,这项技术完全不同:
它使用MVVM,它包含视图(HTML)和模型(JavaScript对象)之间的双向绑定.任何一端的变化都会自动应用于另一端.
它发生在客户端,没有使用或取决于服务器资源(只要它涉及Knockout)
它通常不涉及繁重的业务逻辑,而是简单的视图模型,可以显示和从用户获取数据.
这就是Knockout能为您做的事情.如果需要涉及服务器和"繁重"的业务逻辑,则需要通过发送和接收对象与服务器进行通信,这些对象通常通过公开Web API服务以JSON格式进行.(这些服务通常使用ASP.NET Web API实现,但也可以使用带有JSON结果的ASP.NET MVC操作实现,这是一个更糟糕的选择).
所以ASP.NET MVC涉及控制器的连续使用和浏览器与服务器之间的通信,而Knockout是一种纯粹的客户端技术,根本不需要服务器.当然,要使Knockout应用程序有用,您通常会将其与服务器进行通信.
OTOH,Knockout允许创建单页应用程序,这是一个可以自行运行的JavaScript应用程序,无需从服务器加载新的完整页面,并且通常以Web API的形式与服务通信.这样做的一个优点是,即使没有服务器,应用程序也可以工作,并且响应速度更快,因为它不依赖于与服务器进行通信以刷新视图.