Привязать значение метки opgroup ‹select› к выбранному параметру в плагине Chosen

У меня есть html select, который связан с моделью представления через KnockoutJS и отображается как плагин выбор урожая через пользовательская привязка.

Выбранная разметка:

<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 наблюдаемое изменяется (это происходит, когда я выбираю что-то через «выбранный» графический интерфейс), запускается функция, которая должна сохранить новое значение на сервере.

Проблема в том, что серверу нужны как данные метки группы опций, так и выбранное значение опции.

Как я могу получить метку группы опций для группы, в которой находится выбранная опция в моем функциональном коде?


person Maxim V. Pavlov    schedule 21.10.2012    source источник


Ответы (1)


Разобрались - нужно объединить имя группы и значение параметра в атрибуте value элемента следующим образом:

<option data-bind="text: $data, attr: { value: $parent.ControllerName + ';' + $data }"></option>
person Maxim V. Pavlov    schedule 22.10.2012