将<select> opgroup标签值与选定插件中的选定选项绑定</select>

时间:2012-10-21 22:16:34

标签: knockout.js html-select jquery-chosen

我有一个html select,它是通过KnockoutJS绑定的视图模型,并通过自定义绑定呈现为harvest chosen插件。

选择标记是:

<select class="chzn-select" data-bind="foreach: ControllersAndActions, selectedOptions: NewPermissionCAs, chosen: { PlaceholderText: 'Select', AddPlaceholder: true, ChosenOptions: {allow_single_deselect: true} }">
   <optgroup data-bind="attr: {label: ControllerName}, foreach: Actions">
        <option data-bind="text: $data"></option>
   </optgroup>
</select> 

我使用的自定义选择启用绑定是:

ko.bindingHandlers.chosen = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var options = ko.utils.unwrapObservable(valueAccessor()) || {};
        var allBindings = allBindingsAccessor();
        var attrList = { placeholderText: options.PlaceholderText };
        $.extend(attrList, allBindings.chosen);
        if (options.AddPlaceholder) {
            $(element).attr('data-placeholder', attrList.placeholderText).addClass('chzn-select');
        } else {
            $(element).addClass('chzn-select');
        }
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var options = ko.utils.unwrapObservable(valueAccessor()) || {};
        $(element).chosen(options.ChosenOptions);
        $(element).trigger("liszt:updated");
    }
};

每当NewPermissionCAs可观察到的变化(当我通过“选择的”gui选择某些东西时),会触发一个函数,该函数应该将新值保存到服务器。

问题是服务器需要两个 - 选项组标签数据,以及选择的选项值。

如何在我的功能代码中检索所选选项所在的组的选项组标签?

1 个答案:

答案 0 :(得分:0)

已经弄明白了 - 需要在元素的value属性中连接组名和选项值,如下所示:

<option data-bind="text: $data, attr: { value: $parent.ControllerName + ';' + $data }"></option>