<select data-bind='foreach: theOptions'>
<option data-bind='text: name, value: $root.watchThis().something'></option>
</select>
You have selected <p data-bind="text: watchThis().something"></p>
Json model.
<p data-bind="text: ko.toJSON(watchThis)"></p>
正在显示选项,但是当我更改值时,相对可观察量不会更新。 更多代码:
function FooModel() {
this.something = ko.observable();
}
function VM() {
var self = this;
self.watchThis = ko.observable(new FooModel());
self.theOptions = ko.observableArray();
self.theOptions([
{id:1, name: 'foo'},
{id:2, name: 'bar'},
{id:3, name: 'baz'}
]);
}
ko.applyBindings(new VM());
我也试过
<option data-bind='text: name, value: $root.watchThis().something'></option>
<option data-bind='text: name, value: $root.watchThis.something'></option>
<option data-bind='text: name, value: $parent.watchThis().something'></option>
看起来最糟糕的是,如果我明确地初始化这个值
function FooModel() {
this.something = ko.observable(2);
}
一切看起来都很好,但是当我切换选项时,observable不会更新。
问题是:如何使用选项选项值从外部上下文更新observable?
答案 0 :(得分:4)
绑定select
元素时,您必须使用options
方向,而不是foreach
:
<select data-bind="options: theOptions,
optionsText: 'name',
optionsValue: 'id',
value: watchThis().something">
</select>
请参阅Documentation。