我試圖使用手動選擇值綁定來獲取已選擇的對象的id,但我發現它不填充,除非給定明確的價值。這裏有一個例子:選擇值綁定不會默認填充沒有顯式值
<div id="container">
<select data-bind="value: selectedOption">
<!-- notice the explicit value of 0 given below... why is that necessary to get selectedOption to be populated when bound? -->
<option value="0" data-bind="value: initialSelectedOptionId, text: 'initially selected option'"></option>
<!-- ko foreach: options -->
<option data-bind="value: id, text: name"></option>
<!-- /ko -->
</select>
<span data-bind="text: selectedOption"></span>
var viewModel = {
options: ko.observableArray([
{id: 1, name: 'first option'},
{id: 2, name: 'second option'},
{id: 3, name: 'third option'},
{id: 4, name: 'fourth option'}
]),
selectedOption: ko.observable(),
initialSelectedOptionId: ko.observable(3)
};
ko.applyBindings(viewModel, document.getElementById('container'));
//uncommenting the following line will initially select the correct option
//viewModel.selectedOption(viewModel.initialSelectedOptionId());
Here是表示將採取行動問題上的jsfiddle。請注意,selectedOption屬性在顯式時填充,但不在綁定時完成。這種行爲是一個錯誤嗎?如果不是,這個決定背後的推理是什麼?
出於好奇:你能詳細闡述爲什麼你要避免使用['options' binding](http://knockoutjs.com/documentation/options-binding.html)? – Jeroen
我認爲它比將包含靜態選項的計算集合混合在一起更清潔。 – kmkemp
您提出了一個有效的觀點,這是可以說的。我個人更喜歡使用['optionsCaption'](http://knockoutjs.com/documentation/options-binding.html#parameters)作爲單個靜態選項,或者爲多個「混合計算的集合」(因此它是單元可測試的)。 – Jeroen