【问题标题】:Knockout Model vs ViewModel淘汰模型与 ViewModel
【发布时间】:2013-01-09 01:48:55
【问题描述】:

我试图了解 KO 中的 Model 和 ViewModel 之间的区别。我理解概念上的差异,但在我看来,KO 中的所有模型都将成为或成为 ViewModel 的候选者。解释一下:

假设您有一张带有一排座位的桌子,因此在您的主 ViewModel 中,您将初始化并将一组对象从 Seat Model 加载到可观察数组中.

现在您想根据座位的特定属性隐藏显示座位...这就是您的模型成为另一个视图模型的点...

那么说在 KO 中我们只有 ViewModel 是否正确?

【问题讨论】:

  • 并非如此。您的视图模型负责为属性设置值,例如isVisible 为您的集合中的每个对象。所以你的视图模型也抽象了这个集合。您的 Seat 模型仅包含 isVisible 的定义,它不知道它会发生什么。最后,您的数据绑定根据属性值决定是否在 UI 中显示座位。这是模型和视图模型之间的关注点分离。
  • 所以你现在说相反,everyhting 是一个模型......所以在这里说:learn.knockoutjs.com/#/?tutorial=intro AppViewModel 是一个模型而不是一个 ViewModel......
  • 你所拥有的是一个非常简单的例子。通常,ViewModel 数据项由视图所需的内容驱动,并且它还具有提供交互的命令/功能。模型不处理交互。我在此处稍微扩展了该示例,以解释我在第一条评论中提到的内容。 jsfiddle.net/UCmqk/1
  • 我理解这个概念,但是以你的例子来说,你想让一个人在网格上可见还是不可见,然后你向 person 类添加一个 observable 属性。此时,您的初始模型现在正在驱动 UI,从而成为 ViewModel。

标签: mvvm knockout.js


【解决方案1】:

是的。本质上,任何带有ko.observable 的东西都在创建一个 ViewModel。你可以创建一个简单的 javascript 模型,只用 JSON 表示,然后包装它,但是 Knockout 的 MVVM 模式中的“模型”通常只存在于服务器上。您从服务器获取模型数据,然后将模型数据发送回服务器(请记住,您不发送observables,只发送他们的数据)

Knockout 并不真正关心模型的来源,因为它的主要作用是处理声明性视图 (HTML) 和 ViewModel(及其 View-aware observables)之间的数据绑定。

MVVM 模式是由 Knockout 之外的技术完成的,因为它是一个仅限客户端的框架。你可以说它只是模式的 VVM 部分,但这很令人困惑。

【讨论】:

  • 很好的解释。谢谢
  • 谢谢,真的帮助我理解了这一点
  • 是的,这里引用了 KO 文档:使用 KO 时,您通常会对一些服务器端代码进行 Ajax 调用,以读取和写入这些存储的模型数据。 KO Observables Documentation
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 2014-04-08
  • 1970-01-01
相关资源
最近更新 更多