2012-06-21 11 views
13

を評価するときトリガーしない、フォーマットも、Changeイベントノックアウト更新は、私がテキストエリアの変化にトリガ外部JavaScriptライブラリを持っている

、KnockoutJSは、テキストエリアに値を設定し、変更イベントは発生しません。 Simplified Fiddle of my problem。ノックアウトが私のテキストエリアの値を更新するときに変更イベントを発生させることは可能ですか?

答えて

9

変更イベントでKnockoutを強制的に動作させようとするのではなく、基礎となる観測値にサブスクリプションを設定することができます。このように:http://jsfiddle.net/EZC9E/1/

this.text.subscribe(function(newValue) { 
    alert('Text is changing to ' + newValue); 
});   
+2

ありがとうございました。私はこの解決策を知っています。しかし、私はこの目的のために変更したくない別のライブラリを使用しています。 –

+1

最終的に私はこの解決策をとった。率直に言って、私は望む結果を達成する別の方法を見つけることができなかったからだ。それは私が好きではないライブラリを変更することに関わっていましたが、今は動作しており、それが最も重要なことです。 –

1

代わりのJavaScriptライブラリを変更するには、バインディングカスタムノックアウトにそれをラップ検討するかもしれません。とにかく、特にエレメントを動的に生成/破壊する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'); 
     }); 
    } 
} 
関連する問題