Получите доступ к HTML-параметрам select2 из нокаутированной пользовательской привязки, чтобы отключить их - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь получить доступ к элементам опций из выпадающего списка select2, используя пользовательскую привязку Knockout, чтобы отключить некоторые из них (некоторые из опций).Настраиваемая привязка:

    ko.bindingHandlers.select2 = {
        after: ["options", "value"],
        update: function (el, valueAccessor, allBindingsAccessor, viewModel) {
            var allBindings = allBindingsAccessor();
            var select2 = $(el).data("select2");
        }
    };

, а HTML-часть:

    <div style="width: 350px;">
        <select style="width: 100%;" data-bind="value: attributiSelezionati, options: data, valueAllowUnset: true, optionsText: 'text', optionsValue: 'id', select2: { placeholder: 'Select an option...', allowClear: true, multiple: true}"></select>
    </div>

, где массив данных:

this.data = ko.observableArray([]);
this.data.push(new Item(1, "Item 1"));
this.data.push(new Item(2, "Item 2"));
this.data.push(new Item(2, "Item 22"));
this.data.push(new Item(3, "Item 3"));
this.data.push(new Item(null, "Item 4"));

class Item {
id: KnockoutObservable<number> = ko.observable<number>();
text: KnockoutObservable<string> = ko.observable<string>();

constructor(Id: number, Text: string) {
    this.id(Id);
    this.text(Text);
} 
}

Я вижу данные, когдаЯ нахожусь над элементом el, но не знаю, как получить к нему программный доступ.Кто-нибудь знает, как получить эти предметы? The options to retrieve

1 Ответ

0 голосов
/ 19 декабря 2018

Оно должно быть в valueAccessor()

valueAccessor: представляет функцию JavaScript, которую можно использовать для доступа к текущему свойству или выражению, участвующему в этой привязке.Потому что Knockout позволяет вам использовать либо свойство модели представления напрямую (например, «data-bind = 'enabled: isEnabled'»), либо выражение (например, «data-bind = 'enabled: firstName.length> 0'»).есть служебная функция, которая "развернет" и выдаст вам фактическое значение, используемое в привязке.Кстати, эта функция называется «ko.unwrap».

var val = ko.unwrap(valueAccessor());
//val.options;
...