KnockoutJS:将不同的ViewModel应用于同一个div

时间:2014-05-02 22:36:15

标签: mvvm knockout.js

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

我不知道我是否在正确的道路上,但到目前为止,我有一个VM对象的实例连接到每个按钮。当单击按钮x时,我可以获得其相应的VM并重新将applyBinding添加到div。在这种情况下,我需要解耦旧的绑定 - 我不知道该怎么做。

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

1 个答案:

答案 0 :(得分:0)

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

例如,您可能会收集以下内容:

this.vms = [
   { id: 1, data: {} },
   { id: 2, data: {} },
   { id: 3, data: {} }
];

然后,您可以使用observable来表示当前选定的项目:

this.currentVM = ko.observable();

现在,您可以通过foreach vms生成按钮。当您点击其中一个项目时,您可以使用该项目填充currentVM

然后,您可以针对currentVM呈现一个部分,如:

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

Knockout将处理currentVM为空(没有呈现),然后将处理为您交换内容。这里简要示例:http://jsfiddle.net/rniemeyer/tk3nJ/

这个问题的答案更进一步:Example of knockoutjs pattern for multi-view applications