Mvvm 淘汰模型与视图模型

Mvvm 淘汰模型与视图模型,mvvm,knockout.js,Mvvm,Knockout.js,我试图理解KO中Model和ViewModel之间的区别。我理解概念上的差异,但对我来说,KO中的所有模型似乎都将成为或可能成为ViewModels。我来解释一下: 假设您有一个带有一排座位的桌子,那么在主视图模型中,您将初始化并将一组对象从座位模型加载到一个可观察的数组中 现在,您希望根据座椅的特定属性隐藏显示座椅…这是您的模型成为另一个viewmodel的点 所以说在KO中我们只有ViewModels是正确的吗?是的。本质上,任何带有ko.observable的对象都在创建一个ViewMod

我试图理解KO中Model和ViewModel之间的区别。我理解概念上的差异,但对我来说,KO中的所有模型似乎都将成为或可能成为ViewModels。我来解释一下:

假设您有一个带有一排座位的桌子,那么在主视图模型中,您将初始化并将一组对象从座位模型加载到一个可观察的数组中

现在,您希望根据座椅的特定属性隐藏显示座椅…这是您的模型成为另一个viewmodel的点


所以说在KO中我们只有ViewModels是正确的吗?

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

Knockout并不真正关心模型来自何处,因为它的主要作用是处理声明性视图(HTML)和ViewModel之间的数据绑定(具有视图感知的
可观察对象


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

不太清楚。视图模型负责设置属性值,例如集合中每个对象的isVisible。因此,视图模型也对该集合进行了抽象。您的座椅模型只包含isVisible的定义,它不知道会发生什么。最后,数据绑定根据属性值决定是否在UI中显示座位。这是模型和视图模型之间关注点的分离。所以你现在说的是相反的,每一件事都是一个模型…所以在这里说:AppViewModel是一个模型,而不是一个ViewModel…你有一个非常简单的例子。通常,视图模型数据项由视图需要的内容驱动,并且它还具有用于交互的命令/功能。模型不处理交互。我在这里对这个例子进行了一些扩展,以解释我在第一次评论中提到的内容。我理解这个概念,但以你的例子来说,你想让一个人在网格上可见还是不可见,然后你给person类添加了一个可观察的属性。此时,您的初始模型正在驱动UI,从而成为ViewModel。非常好的解释。感谢Hanks,真的帮助我理解了这一点。是的,这里引用了KO文档中的一句话:在使用KO时,您通常会对一些服务器端代码进行Ajax调用,以读取和写入存储的模型数据。