これはjsfiddle http://jsfiddle.net/gauldivic/wLrhrno9/ですが、これは私が望むものに近いです。それはoptgroupsを持っている、しかし、私はoptgroupで選択値を設定するknockoutjs
が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>
私はこれを知っている値
JSを設定する方法を見つけ出すように見えることはできません選択したオプションを設定する場所ですが、どのようにそれを働かせる。 this.selectedOption = ko.observable(); 同じページで複数の選択肢を使用しても同じですか? これをデータベースで使用し、オプションを事前に選択できるようにします。
私は間違ったフィドルを上げたことを知りました。 http://jsfiddle.net/gauldivic/wLrhrno9/2/は正しいフィドルです。このインデックスは自分自身でテストしていました。私の質問はthis.selectedOption = ko.observable();で選択されている場合はどうすればいいですか? –
値を設定して取得するフィドルです。私の答えがうまくいかない2つのフィドルの間に違いは見られません。私はthis.selectedOptionの値を設定し、this.specialPropertyを介して両方のFiddlesごとに取得します。変更があったときに警告が必要な場合は、 'this.selectionOption.subscribe'を使用してください。 – brianlmerritt
http://knockoutjs.com/documentation/observables.html – brianlmerritt