4

我是 knockout.js 的新手。不久前,我读到了 ko 的标题功能。我不明白ko真的是MVVVM吗?因为他们谈论的只是数据绑定和它的易用性。但我确信 MVVM 不仅仅是数据绑定,不是吗?

4

3 回答 3

9

是的,knockout.js 确实应用了 MVVM 模式。文档中对此进行了解释

  • 模型:您的应用程序存储的数据。此数据代表您的业务领域中的对象和操作(例如,可以执行汇款的银行帐户)并且独立于任何 UI。使用 KO 时,您通常会通过 Ajax 调用一些服务器端代码来读取和写入这些存储的模型数据。

  • 视图模型:UI 上数据和操作的纯代码表示。例如,如果您正在实现一个列表编辑器,您的视图模型将是一个包含项目列表的对象,并公开添加和删除项目的方法。

    请注意,这不是 UI 本身:它没有任何按钮或显示样式的概念。它也不是持久数据模型——它保存了用户正在使用的未保存数据。使用 KO 时,您的视图模型是纯 JavaScript 对象,不包含 HTML 知识。以这种方式保持视图模型抽象可以让它保持简单,因此您可以管理更复杂的行为而不会迷失方向。

  • 视图:表示视图模型状态的可见、交互式 UI 。它显示来自视图模型的信息,向视图模型发送命令(例如,当用户单击按钮时),并在视图模型的状态发生变化时进行更新。

    使用 KO 时,您的视图只是您的 HTML 文档,具有声明性绑定以将其链接到视图模型。或者,您可以使用使用视图模型中的数据生成 HTML 的模板。

于 2013-08-17T09:42:36.247 回答
3

除了已经提供的答案之外,还有一些事情要记住 -

MVVM

Knockout 是 MVVM,因为它支持良好的关注点分离。与其他 JavaScript 库(例如 jQuery)不同,它的目标是不让与视图无关的视图污染视图。

理解的view model目的很重要。它不会尝试操作 DOM,因为只有向视图提供数据所需的逻辑放置在其中。

view目的只是呈现(呈现)数据。这里没有逻辑、验证或其他逻辑代码。

model是唯一一个让 Knockout 有点棘手的地方。在项目中单独放置一个供 Knockout 使用通常是一种公认​​的良好做法model,但许多开发人员发现modelview model. 这样做的原因是显而易见的(有些models 是非常基本的),但这只是为了易于实现。

MVC 与 MV*

当然在 SO.com 上还有其他答案试图回答什么是MV*,但我想在这里投入 0.02 美元 - 其他库或框架说明它们是MVCMVPMV(whatever)基于的事实,但 Knockout 是我发现的唯一一个在这方面实践它所宣扬的。如果你有时间和愿望,看看其他框架的结构,比如 Angular 或 Ember,你会发现存在一条模糊的界限,它们或多或少只是在使用MVVM基于模式但称之为不同的东西。

于 2013-08-17T12:57:41.673 回答
0

好吧,我想可以,但是我正在开发一个项目,其中所有样式和 UI 布局操作都在淘汰赛 js ViewModel 文件中完成,这不是一个好习惯。

于 2013-12-17T09:49:33.260 回答