Событие изменения не срабатывает, когда значение обновления для нокаута
У меня есть внешняя библиотека javascript, которая запускает изменение текстового поля, форматирует его и т.д.
Однако, когда KnockoutJS устанавливает значение в текстовое поле, событие изменения не запускается. Упрощенная скрипта моей проблемы. Возможно ли запустить событие изменения, когда нокаут обновляет значение моего текстового поля?
Ответы
Ответ 1
Вместо того, чтобы пытаться заставить нокаут работать с событиями изменения, вы можете настроить подписку на базовую наблюдаемую. Например: http://jsfiddle.net/EZC9E/1/
this.text.subscribe(function(newValue) {
alert('Text is changing to ' + newValue);
});
Ответ 2
Вместо того, чтобы изменять библиотеку javascript, вы можете рассмотреть возможность ее переноса в Custom Knockout Binding. Возможно, вам уже понадобится использовать пользовательскую привязку для вашей библиотеки, особенно если вы используете любые привязки foreach
, которые генерируют/уничтожают элементы динамически.
Как только у вас есть пользовательская привязка, у вас есть очень удобное место для запуска "изменения".
ko.bindingHandlers.jQueryPluginFunctionCall = {
init: function (element, valueAccessor, allBindingsAccessor) {
// Apply jQuery plugin to textarea
$(element).jQueryPluginFunctionCall();
// Subscribe to the value binding of the textarea, and trigger the change event.
allBindingsAccessor().value.subscribe(function () {
$(element).trigger('change');
});
// Clean up jQuery plugin on dispose
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
// This will be called when the element is removed by Knockout or
// if some other part of your code calls ko.removeNode(element)
$(element).jQueryPluginFunctionCall('destroy');
});
}
}