Change event doesn't trigger when Knockout updates value

后端 未结 2 1912
闹比i
闹比i 2021-02-19 13:09

I have an external javascript library which triggers on the change of a textarea, formats it, etc.

However, when KnockoutJS sets the value to the textarea, the change ev

相关标签:
2条回答
  • 2021-02-19 13:54

    Instead of changing the javascript library, you might consider wrapping it into a Custom Knockout Binding. You may already need to use a custom binding for your library anyway, especially if you're using any foreach bindings that generate/destroy elements dynamically.

    Once you've got the custom binding, you have a very convenient place to trigger 'change' from.

    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');
            });
        }
    }
    
    0 讨论(0)
  • 2021-02-19 14:12

    Rather than trying to force Knockout to work with change events you can setup a subscription on the underlying observable. Like this: http://jsfiddle.net/EZC9E/1/

    this.text.subscribe(function(newValue) {
        alert('Text is changing to ' + newValue);
    });        
    
    0 讨论(0)
提交回复
热议问题