我试图创建一组下拉列表,以便可以动态地将新的下拉列表添加到集合中。一个例子是订购披萨的表格,以及一组用于浇头的选择标签。我们不知道用户需要多少配料,因此我们将从一个开始,并在用户选择第一个配料时动态添加一个新的配料。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