【发布时间】: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