不要更新所有选择框 - 淘汰赛js

时间:2015-12-16 22:41:18

标签: javascript knockout.js

请考虑以下事项:

self.selected = ko.observable();
self.selectionItems = ko.observableArray([{name: "bob"}, {name: "sally"}]);
self.containers = ko.observableArray([{name: "container 1", key:1}, {name: "container 2", key: 2}]);

如果我有以下html:

<div data-bind="foreach: containers">
  <div>
    <select data-bind="options: $parent.selectionItems, optionsText: 'name', optionsValue: 'name', value: $parent.selected"></select>
  </div>
</div>

然后,当其中一个容器选择了一个项目时,所有容器都会更新以反映容器x中您选择了bob名称的事实。

如何进行特定于该容器元素的可观察对象的操作?

基本上,如果我通过self.containers有20个容器,每个容器应该观察它自己的动作。我会将self.selected变成observableArray吗?

1 个答案:

答案 0 :(得分:1)

如果将每个选择的value绑定到同一个observable,它们将具有相同的值。您需要在containers对象中有一个observable来存储所选的。

self.containers = ko.observableArray([{
  name: "container 1",
  key: 1,
  selected: ko.observable()
}, {
  name: "container 2",
  key: 2,
  selected: ko.observable()
}]);

或者,您可以在父级中拥有一个observableArray选定项,但这需要您将数组的大小调整为与containers相同的长度,并且您必须使用{{ 1}}得到正确的;它是一个笨重的选择。