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

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

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

Ответы на вопрос(2)

Решение Вопроса

чтобы заставлять Knockout работать с событиями изменений, вы можете настроить подписку на базовую наблюдаемую. Как это:http://jsfiddle.net/EZC9E/1/

this.text.subscribe(function(newValue) {
    alert('Text is changing to ' + newValue);
});        
 Jesse van Assen21 июн. 2012 г., 13:02
Благодарю за ваш ответ. Я знаю об этом решении. Однако я использую отдельную библиотеку, которую не хочу изменять для этой цели.
 Jesse van Assen22 июн. 2012 г., 23:42
В конце концов я пошел с этим решением, потому что, честно говоря, я не мог найти другой путь для достижения желаемого результата. Он включал в себя изменение библиотеки, которая мне не нравится, но она работает сейчас, и это самое главное.

чтобы изменять библиотеку 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');
        });
    }
}

Ваш ответ на вопрос