另一位用户建议使用Knockout MVC来处理一些AJAX发布问题。 我了解了一些相关信息,发现它是基于Knockout JS封装的。所以我想知道这两者之间真正的区别在哪里?既然有Knockout MVC,是否还需要使用Knockout JS呢?什么时候应该使用其中的一个而不是另一个呢?
另一位用户建议使用Knockout MVC来处理一些AJAX发布问题。 我了解了一些相关信息,发现它是基于Knockout JS封装的。所以我想知道这两者之间真正的区别在哪里?既然有Knockout MVC,是否还需要使用Knockout JS呢?什么时候应该使用其中的一个而不是另一个呢?
Knockout MVC 是 WebForms 的私生子。它通过控制器操作路由所有视图模型方法,这意味着每个操作都必须在客户端和服务器之间来回传输。我无法理解为什么有人会拿像 Knockout 这样的客户端MVVM框架,并强制让它调用每个函数时都要访问服务器。
此外,在服务器上执行这些方法意味着整个视图模型需要传递到服务器,然后再传回到客户端,对资源非常浪费。
使用 Knockout MVC 意味着牺牲了客户端代码的所有性能优势,只是为了不写 JavaScript。这与 WebForms 做出的同样的权衡相似,但并不明智,而且是一种反模式。
如果 Knockout MVC 明天消失了,网络世界将变得更好。
我刚看到这个有一些非常负面的回复的问题。我会快速加上我的两分钱。
我刚刚开始使用 KnockoutJS。由于我正在构建 ASP.NET MVC 应用程序,因此对我来说使用类似 Knockout MVC 的东西似乎很合理。在大多数情况下,这似乎是一个好主意。如果我可以使用我所知道和喜爱的 .Net 功能来完成相同的工作,我就不想花时间编写 javascript 和 <!-- ko -->
注释。
话虽如此……目前 KMVC 有限制。将整个模型发送回服务器是其中之一。因此,我已经开始了自己的 knockout-mvc 分支。目前的更改必须匆忙进行。但是,我现在能够:
我希望很快就会回来,真正整理我所做的事情。希望作者能将这些更改包含在他的代码中。如果不是,我想我会继续使用自己的分支。无论哪种方式,都有曙光。KMVC 可能需要工作,但我相信这个概念绝对值得做。
我肯定认为
如果 Knockout MVC 明天消失了,网络会变得更好。
有点过于苛刻了。
编辑:
我正在查看评论并再次查看原始问题。在这样做之后,我认为我的答案应该再加一点:
首先,原始问题是“我是否有理由使用 Knockout MVC 而不是 Knockout JS?”为了回答/澄清这个问题(也许我只是太挑剔了):Knockout MVC 是一个框架,旨在使将 KnockoutJS 集成到您的 ASP.NET MVC 应用程序中更容易。它主要通过使用熟悉的强类型构造生成 KnockoutJS 标记来实现这一点。它并不是 KnockoutJS 的替代品。一定要使用 KnockoutJS 。问题实际上是是否要同时使用 Knockout MVC。
话虽如此,作为开发人员,选择何时使用可用工具的各种方面仍然取决于您自己。如果您想通过向服务器执行完整请求来处理某个功能方面,请执行该操作。如果您想执行 ajax 请求以检索/更新数据,请执行该操作。如果您想完全在客户端执行功能,则请执行该操作。
使用 Knockout MVC 不会阻止您充分利用 KnockoutJS。使用 Knockout MVC 不会阻止您编写其他 JavaScript 代码,以处理尽可能多的客户端功能。仅因为 Knockout MVC 为您提供了一种生成向服务器的 ajax 回调的快捷方式,就不意味着您必须使用它们。虽然,如果应用程序持久存储数据,那么它必须在某个时候调用 home。
与仅使用 Apache 提供静态 HTML 和脚本文件相比,使用 ASP.NET MVC 构建应用程序后端有其优点。Knockout MVC 允许您继续利用这些同样的好处来辅助 KnockoutJS 的集成。
我认为Tyrsius的回答有点太消极了。Knockout MVC仍处于早期开发阶段,但从我所看到的来看,它具有一些优势,比如与Webforms相比减轻了服务器负担。可见性依赖完全在客户端处理,仅在使用函数时才会调用服务器。当使用复杂数据结构时,有时仍需要通过服务器进行处理,因此使用Knockout MVC可能是节省大量自己编写Ajax处理的好方法。
确实,它总是发送整个模型来回传输,这会带来一些额外开销,而不是自行构建。但我不会完全排除它的可能性。特别是当未来有了针对复杂验证的适当客户端处理时。
我在搜索有关knockout mvc的信息时发现了这篇文章。虽然我同意浪费网络带宽是不好的,但是这行代码还是让我很心动:
@{
var ko = Html.CreateKnockoutContext();
}
这是一种整洁简洁的方式,用于生成 knockout 视图模型。有人只使用 knockout MVC 的这个特性而没有将所有逻辑移到服务器端吗?
var myViewModel = ko.mapping.fromJS([将MVC模型返回为JSON]);
。这种方法不需要使用AJAX。 - Lasse Espeholt如果您不使用由komvc生成的函数,仍然可以保持性能。正如Nigel所说,初始页面生成仍然必须由服务器生成。您始终可以添加用户脚本并在客户端创建函数,这些函数不需要返回到服务器。这是一种为开发人员提供生产力的工具。与Web表单的性能比较肯定是夸大其词的。各位,这确实是一个有助于您满足截止日期的工具。