gpt4 book ai didi

javascript - KnockoutJS - 选择与 optgroup 和 javascript 对象的绑定(bind)值

转载 作者:IT王子 更新时间:2023-10-29 03:21:53 26 4
gpt4 key购买 nike

我找到了一个例子 here使用 KnockoutJS 创建带有 optgroups 的选择列表。这工作正常,但我想将下拉列表的值绑定(bind)到我自己的 javascript 对象,然后访问该对象的特定属性:

<select data-bind="foreach: groups, value:selectedOption">
<optgroup data-bind="attr: {label: label}, foreach: children">
<option data-bind="text: label"></option>
</optgroup>
</select>
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);

最佳答案

对于这种情况,一个不错的选择是创建一个快速自定义绑定(bind),让您的“手工制作”选项的行为方式与 options 绑定(bind)创建的选项相同(将对象附加为 meta -数据)。绑定(bind)可以简单地看起来像:

ko.bindingHandlers.option = {
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
ko.selectExtensions.writeValue(element, value);
}
};

你会像这样使用它:

<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>

此处示例:http://jsfiddle.net/rniemeyer/aCS7D/

关于javascript - KnockoutJS - 选择与 optgroup 和 javascript 对象的绑定(bind)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com