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

标签 javascript jquery knockout.js

我找到了一个例子 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/

相关文章:

javascript - 除非已经插入文档,否则将文档插入集合中?

jquery - <option> 上的 val() 返回文本而不是 ie7 中的值

jquery - Knockout.js 与 jquery ui datepicker 可以在除 IE 之外的任何地方工作

javascript - 如何提前退出 Promises 的组合

javascript - 洪水填充算法在 JavaScript 中的实现

Javascript Infinity-- (infinity minus minus) 产生无穷大

jquery - 如果我使用 jQuery 语法 : $ ("<img src=' img. jpg'>") ,图像实际上会下载到客户端吗?

jQuery 根据页面 URL 添加类和单独的类

javascript - 在knockout js observableArray中加入函数?

javascript - Knockout 3.2.0 - 在模板内传递额外参数