Подтвердить что ты не робот

Событие изменения не срабатывает, когда значение обновления для нокаута

У меня есть внешняя библиотека javascript, которая запускает изменение текстового поля, форматирует его и т.д.

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

4b9b3361

Ответ 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');
        });
    }
}