use*_*734 29 javascript jquery knockout.js
我在这里找到了一个示例,使用KnockoutJS创建一个带有optgroups的选择列表.这工作正常,但我想将下拉列表的值绑定到我自己的javascript对象,然后访问该对象的特定属性:
<select data-bind="foreach: groups, value:selectedOption">
<optgroup data-bind="attr: {label: label}, foreach: children">
<option data-bind="text: label"></option>
</optgroup>
</select>
Run Code Online (Sandbox Code Playgroud)
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 = {
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")
])
]),
selectedOption: ko.observable(),
specialProperty: ko.computed(function(){
this.selectedOption().someOtherProperty();
})
};
ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)
RP *_*yer 40
这种情况的一个很好的选择是创建一个快速自定义绑定,让您的"手工制作"选项的行为与options
绑定创建的选项相同(将对象作为元数据附加).绑定可能看起来像:
ko.bindingHandlers.option = {
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
ko.selectExtensions.writeValue(element, value);
}
};
Run Code Online (Sandbox Code Playgroud)
您会像以下一样使用它:
<select data-bind="foreach: groups, value: selectedOption">
<optgroup data-bind="attr: {label: label}, foreach: children">
<option data-bind="text: label, option: $data"></option>
</optgroup>
</select>
Run Code Online (Sandbox Code Playgroud)
示例:http://jsfiddle.net/rniemeyer/aCS7D/
小智 10
这个版本带有标题,如果你想选择父项:
<select data-bind="value: selectedOption ">
<option data-bind="value:'', text:'Select'"></option>
<!-- ko foreach: groups -->
<optgroup data-bind="attr:{label: label}">
<option data-bind="value: $data, text:label"></option>
<!-- ko foreach: children -->
<option data-bind="value: $data, text:label"></option>
<!-- /ko -->
</optgroup>
<!-- /ko -->
</select>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14961 次 |
最近记录: |