2012-06-21 6 views
13

내가 외부 텍스트 영역의 변화를 유발하는 자바 스크립트 라이브러리, 형식이 등변경 이벤트는 녹아웃 업데이트

그러나, KnockoutJS가 텍스트 영역에 값을 설정, 변경이 가치 때 트리거되지 않습니다 이벤트가 시작되지 않았습니다. Simplified Fiddle of my problem. Knockout이 내 텍스트 영역의 값을 업데이트 할 때 변경 이벤트를 실행할 수 있습니까?

답변

9

강제로 변경 이벤트에 대한 작업을 시도하는 대신 기본 관찰 가능 항목에 대한 구독을 설정할 수 있습니다. 이처럼 : http://jsfiddle.net/EZC9E/1/

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

감사합니다. 나는이 해결책을 알고있다. 그러나, 나는이 목적을 위해 수정하고 싶지 않은 별도의 라이브러리를 사용하고 있습니다. –

+1

솔직히 원하는 결과를 얻기위한 또 다른 방법을 찾을 수 없었기 때문에 결국이 솔루션을 사용했습니다. 그것은 내가 좋아하지 않는 라이브러리를 수정하는 것이었지만, 지금은 작동하며 이것이 가장 중요한 것입니다. –

1

자바 스크립트 라이브러리를 변경, 당신이 사용자 정의 녹아웃이 바인딩으로 포장하는 것이 좋습니다 대신에. 어쨌든 특히 요소를 동적으로 생성/파괴하는 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'); 
     }); 
    } 
}