如何使用Knockout中的options
绑定和一个对象数组生成一个具有value
属性的选项列表,可以像表单中的普通选择列表一样使用?< / p>
一些示例数据......
[
{ "Id": "0", "Title": "Red", "Desc": "Some text.." },
{ "Id": "1", "Title": "Green", "Desc": "Other text.." },
{ "Id": "2", "Title": "Blue", "Desc": "More text.." }
]
所需的输出看起来像这样......
<select name="color">
<option value="0">Red</option>
<option value="1">Green</option>
<option value="2">Blue</option>
</select>
如下所示,在我的Fiddle中,我还希望在单独的区域中显示说明。看起来这一切都应该很容易实现,但我无法弄清楚如何将ID值添加到选项的value
属性中。
我的HTML ...
<select data-bind="options: colors,
optionsCaption: 'Choose...',
optionsValue: 'Title',
value: selectedColor"></select>
<hr>
<h3>Description</h3>
<div data-bind="text: selectedColor()"></div>
我的JavaScript ......
function ViewModel() {
var self = this;
self.selectedColor = ko.observable();
self.colors = ko.observableArray([
{ "Id": "0", "Title": "Red", "Desc": "Some text.." },
{ "Id": "1", "Title": "Green", "Desc": "Other text.." },
{ "Id": "2", "Title": "Blue", "Desc": "More text.." }
]);
};
ko.applyBindings(new ViewModel());
我尝试过像......
self.description = ko.observable(self.selectedColor().Desc);
......但无济于事。
答案 0 :(得分:4)
您需要在select上将数据绑定从optionsValue
更改为optionsText
。然后selectedColor的值将是整个对象。在您的div中,您将数据绑定到selectedColor().Desc
<select data-bind="options: colors,
optionsCaption: 'Choose...',
optionsText: 'Title',
value: selectedColor"></select>
<hr>
<h3>Description</h3>
<div data-bind="text: selectedColor().Desc"></div>
现在,如果您绝对需要select
将值作为ID,则可以使用一个属性来保存ID,并使用另一个计算属性来获取所选颜色对象。就像在这个更新的小提琴:http://jsfiddle.net/9wZFk/
请注意,我也改变了一些绑定。
基本上重命名了您现有的属性并添加了另一个:
self.selectedColorId = ko.observable();
self.selectedColor = ko.computed(function () {
return self.colors()[self.selectedColorId()];
});