我是 knockout.js 的新手。不久前,我读到了 ko 的标题功能。我不明白ko真的是MVVVM吗?因为他们谈论的只是数据绑定和它的易用性。但我确信 MVVM 不仅仅是数据绑定,不是吗?
3 回答
是的,knockout.js 确实应用了 MVVM 模式。文档中对此进行了解释:
模型:您的应用程序存储的数据。此数据代表您的业务领域中的对象和操作(例如,可以执行汇款的银行帐户)并且独立于任何 UI。使用 KO 时,您通常会通过 Ajax 调用一些服务器端代码来读取和写入这些存储的模型数据。
视图模型:UI 上数据和操作的纯代码表示。例如,如果您正在实现一个列表编辑器,您的视图模型将是一个包含项目列表的对象,并公开添加和删除项目的方法。
请注意,这不是 UI 本身:它没有任何按钮或显示样式的概念。它也不是持久数据模型——它保存了用户正在使用的未保存数据。使用 KO 时,您的视图模型是纯 JavaScript 对象,不包含 HTML 知识。以这种方式保持视图模型抽象可以让它保持简单,因此您可以管理更复杂的行为而不会迷失方向。
视图:表示视图模型状态的可见、交互式 UI 。它显示来自视图模型的信息,向视图模型发送命令(例如,当用户单击按钮时),并在视图模型的状态发生变化时进行更新。
使用 KO 时,您的视图只是您的 HTML 文档,具有声明性绑定以将其链接到视图模型。或者,您可以使用使用视图模型中的数据生成 HTML 的模板。
除了已经提供的答案之外,还有一些事情要记住 -
MVVM
Knockout 是 MVVM,因为它支持良好的关注点分离。与其他 JavaScript 库(例如 jQuery)不同,它的目标是不让与视图无关的视图污染视图。
理解的view model
目的很重要。它不会尝试操作 DOM,因为只有向视图提供数据所需的逻辑放置在其中。
的view
目的只是呈现(呈现)数据。这里没有逻辑、验证或其他逻辑代码。
这model
是唯一一个让 Knockout 有点棘手的地方。在项目中单独放置一个供 Knockout 使用通常是一种公认的良好做法model
,但许多开发人员发现model
将view model
. 这样做的原因是显而易见的(有些model
s 是非常基本的),但这只是为了易于实现。
MVC 与 MV*
当然在 SO.com 上还有其他答案试图回答什么是MV*
,但我想在这里投入 0.02 美元 - 其他库或框架说明它们是MVC
或MVP
或MV(whatever)
基于的事实,但 Knockout 是我发现的唯一一个在这方面实践它所宣扬的。如果你有时间和愿望,看看其他框架的结构,比如 Angular 或 Ember,你会发现存在一条模糊的界限,它们或多或少只是在使用MVVM
基于模式但称之为不同的东西。
好吧,我想可以,但是我正在开发一个项目,其中所有样式和 UI 布局操作都在淘汰赛 js ViewModel 文件中完成,这不是一个好习惯。