我試圖創建一組下拉列表,以便可以動態地將新的下拉列表添加到集合中。一個例子是訂購披薩的表格,以及一組用於澆頭的選擇標籤。我們不知道用戶需要多少配料,因此我們將從一個開始,並在用戶選擇第一個配料時動態添加一個新的配料。Knockout.js在foreach綁定中選擇選項和值的綁定
我遇到的問題是select上的值綁定無法正常工作。如果最初設置了值對象,select將綁定到它,但是任何更改都不會更新虛擬機中的observable。
我已經嘗試了所有不同類型的基礎上$數據綁定方法,使用別名,使用不同的上下文走回對象,並結合在不同的地方環境中使用虛擬元件等
這個例子有點做作,因爲會有其他代碼參與實際添加更多選擇等,但它確實複製了我所看到的問題。只需選擇幾個澆頭,然後單擊檢查值按鈕以查找未在VM中設置的選擇。
http://jsfiddle.net/x6u0hutm/5/
<!-- ko foreach: {data: selectedPropertyNames} -->
<select data-bind="options:$root.nameOptions, value: $data, optionsCaption:'Pick One'"></select>
<!-- /ko -->
<button type="button" data-bind="click: checkValues">Check Values</button>
function ViewModel() {
var self = this;
this.nameOptions = ko.observableArray([]);
this.selectedPropertyNames = ko.observableArray([]);
var firstSelection = ko.observable(null);
this.selectedPropertyNames.push(firstSelection);
var secondSelection = ko.observable('Beef');
this.selectedPropertyNames.push(secondSelection);
this.nameOptions(['Pepperoni', 'Beef', 'Pineapple', 'Green Peppers', 'Extra Cheese']);
this.checkValues = function() {
for (var i = 0; i < self.selectedPropertyNames().length; i++) {
console.log(self.selectedPropertyNames()[i]());
}
}
};
ko.applyBindings(new ViewModel());
謝謝,奇怪的巧合只是想出了這一點。沒有意識到$數據被解開。 – Totty