Mvvm KnockoutJS:对同一个div应用不同的ViewModels

Mvvm KnockoutJS:对同一个div应用不同的ViewModels,mvvm,knockout.js,Mvvm,Knockout.js,想象一下,页面上有n个按钮,每个按钮在单击时打开一个div。实际上,有一个单独的div,它在单击时被重新关联到每个按钮。我希望div上的数据绑定到每个按钮的ViewModel实例 我不知道我是否在正确的路径上,但到目前为止,我有一个VM对象的实例连接到每个按钮。当点击按钮x时,我可以得到它相应的VM并重新应用绑定到div。在这种情况下,我需要解耦旧绑定-我不知道如何做 我的方法对我来说似乎很好,但这可能是因为我来自C#/Java背景,将所有东西都视为对象和引用。也许有更好的方法?在一个典型的KO

想象一下,页面上有n个按钮,每个按钮在单击时打开一个div。实际上,有一个单独的div,它在单击时被重新关联到每个按钮。我希望div上的数据绑定到每个按钮的ViewModel实例

我不知道我是否在正确的路径上,但到目前为止,我有一个VM对象的实例连接到每个按钮。当点击按钮x时,我可以得到它相应的VM并重新应用绑定到div。在这种情况下,我需要解耦旧绑定-我不知道如何做


我的方法对我来说似乎很好,但这可能是因为我来自C#/Java背景,将所有东西都视为对象和引用。也许有更好的方法?

在一个典型的KO应用程序中,您可能希望一次性应用绑定。Knockout的模板和控制流绑定可以帮助您“交换”内容

例如,您可能有一组内容,如:

this.vms = [
   { id: 1, data: {} },
   { id: 2, data: {} },
   { id: 3, data: {} }
];
然后,您可以有一个可观察对象来表示当前选定的项目:

this.currentVM = ko.observable();
现在,您可以通过在
vms
上执行
foreach
来生成按钮。当您单击其中一个项目时,可以使用该项目填充
currentVM

然后,您可以针对
currentVM
渲染一个节,如下所示:

<div data-bind="with: currentVM">
    ...some content
</div>

…一些内容
Knockout将处理
currentVM
为空(未呈现任何内容),然后为您处理内容的交换。这里的简要示例:

这个问题的答案更进一步的是这个想法: