我有以下问题,并为它做了一个小小提琴来解释我的问题。
我的代码中有以下视图模型:
var InnerModel = function(n){
var self = this;
self.name = ko.observable(n);
self.selectedOption = ko.observable('Option2');
};
var OuterModel = function(){
var self = this;
self.inners = new ko.observableArray([new InnerModel('A'), new InnerModel('B')]);
self.options = ['Option1', 'Option2', 'Option3'];
};
var viewModel = new OuterModel();
ko.applyBindings( viewModel);
此外,我还有以下相关的 HTML:
<table>
<tbody data-bind="foreach: inners">
<tr>
<td>
<p data-bind="text: selectedOption"></p>
</td>
<td>
<select data-bind="options: $root.options,
value: selectedOption"></select>
</td>
</tr>
</tbody>
</table>
这按预期工作。选择框以选中的 Option2 开始,当我在选择框中选择一个新选项时,InnerModel.selectedOption 也会更改它的值。所以这里一切都很好。
但就我而言,我需要 OuterModel 中的选项列表不仅仅是一个字符串数组,所以我将其更改为:
self.options = [{ name: 'Option1', value: 1},{ name: 'Option2', value: 1},{ name: 'Option3', value: 1}];
optionsText: 'name'
然后在我添加到选择框上的数据绑定的 HTML中。
选择框现在仍显示三个有效选项,但指向 self.selectedOption 的链接不再起作用(如预期的那样),因为 Knockout 很难将文本“Option2”与 OuterModel.options 中包含的选项之一匹配列表。
有什么办法可以更改 InnerModel.selectedOption 以使绑定仍然像以前一样工作?使用数组中的实际选项从 OuterModel 向 InnerModel 发送引用不是一种选择,因为它们在实际应用程序中是完全分开的。