Я использую то, что я считаю общепринятый ko.bindingHandler.select2
:Обновление модели не обновляет вид
ko.bindingHandlers.select2 = {
init: function (element, valueAccessor) {
$(element).select2(valueAccessor());
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).select2('destroy');
});
},
update: function (element) {
$(element).trigger('change');
}
};
Однако, это, кажется, есть несколько вопросов. В этом вопросе я хотел бы найти ответ о том, как сделать обновление «Просмотр», когда будет произведено изменение модели.
Я создал jsFiddle, который демонстрирует проблему. У меня есть простая функция setTimeout()
, которая устанавливает selectedValue
модели через 0,25 секунды для эмуляции поведения, аналогичного загрузке данных модели через вызов Ajax. В этом примере выпадающее значение не обновляется при использовании Select2, но, похоже, работает нормально для нормального раскрывающегося списка.
Полное решение: Мой обновленный пользовательский привязки теперь выглядит следующим образом ...
ko.bindingHandlers.select2 = {
init: function (element) {
$(element).select2({});
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).select2('destroy');
});
},
update: function (element, valueAccessor) {
var value = valueAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);
$(element).val(valueUnwrapped).trigger('change');
}
};
В моем HTML Теперь я передаю значение в пользовательскую привязку.
data-bind="select2: selectedValueS2
Не уверен, что понял вопрос. Кажется, все работает так, как предполагалось. setTimeout изменяет значения, а затем обновляет UI. –
Извините, предыдущий комментарий смотрел на неправильную скрипку. Но ваша скрипка фактически избавляется от специального выделения select2, которое использовал OP. Вы не исправили проблему, вы просто полностью удалили плагин. – Tyrsius
Его скрипка содержит плагин 'select2', кстати. Посмотрите в разделе «Внешние ресурсы». – Tyrsius