想象一下页面上的n个按钮,每个按钮都会打开一个div。实际上有一个div,它在点击时与每个按钮重新关联。我希望div上的数据绑定到每个按钮的ViewModel实例。
我不知道我是否在正确的道路上,但到目前为止,我有一个VM对象的实例连接到每个按钮。当单击按钮x时,我可以获得其相应的VM并重新将applyBinding添加到div。在这种情况下,我需要解耦旧的绑定 - 我不知道该怎么做。
我的方法对我来说似乎很好,但这可能是因为我来自C#/ Java背景并将所有内容视为对象和引用。也许有更好的方法?
答案 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