0
有这个jsfiddle http://jsfiddle.net/gauldivic/wLrhrno9/这是接近我想要的。它有optgroups,但我似乎无法弄清楚如何设置值使用optgroup设置选择值knockoutjs
JS
ko.bindingHandlers.option = {
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
ko.selectExtensions.writeValue(element, value);
}
};
function Group(label, children) {
this.label = ko.observable(label);
this.children = ko.observableArray(children);
}
function Option(label, property) {
this.label = ko.observable(label);
this.someOtherProperty = ko.observable(property);
}
var ViewModel = function() {
this.groups = ko.observableArray([
new Group("Group 1", [
new Option("Option 1", "A"),
new Option("Option 2", "B"),
new Option("Option 3", "C")
]),
new Group("Group 2", [
new Option("Option 4", "D"),
new Option("Option 5", "E"),
new Option("Option 6", "F")
])
]);
this.selectedOption = ko.observable();
this.specialProperty = ko.computed(function(){
var selected = this.selectedOption();
return selected ? selected.someOtherProperty() : 'unknown';
}, this);
};
ko.applyBindings(new ViewModel());
HTML
<select data-bind="foreach: groups, value: selectedOption">
<option></option>
<optgroup data-bind="attr: {label: label}, foreach: children">
<option data-bind="text: label, option: $data"></option>
</optgroup>
我知道这是哪里设置选定的选项,但我似乎无法弄清楚如何让它工作。 this.selectedOption = ko.observable(); 此外,这将与多个选择在同一页面上工作? 我将使用这个数据库,我想能够预先选择的选项。
我刚刚发现我把错误的小提琴。 http://jsfiddle.net/gauldivic/wLrhrno9/2/是正确的小提琴。该索引是我自己测试的东西。我想我的问题是在这种情况下this.selectedOption = ko.observable();我会怎么把那里选择的选项 –
我提出的小提琴设置值并检索它。我没有看到两个小提琴之间的任何差异,使我的答案不起作用。我正在设置this.selectedOption的值,并通过this.specialProperty根据这两个小提琴进行检索。如果您需要提醒它何时更改,请使用'this.selectionOption.subscribe' – brianlmerritt
http://knockoutjs.com/documentation/observables.html – brianlmerritt