2012-12-17 1 views
0

현재 프로젝트에서 knockout.js와 hammer.js를 모두 사용하고 있습니다. hammer.js에서 'tap'이벤트에 대한 사용자 정의 바인딩 핸들러를 만들었습니다 (이 작업은 홀드 또는 스 와이프와 같은 다른 이벤트에서도 작동해야 함). 내 문제는이 바인딩 처리기에서 HTML의 데이터 바인딩 특성에서 제공하는 메서드를 호출하려고합니다. 녹아웃 문서에 따르면, 나는 valueAccessor()를 호출해야한다는 것을 알았지 만 불행히도 이것은 아무 것도하지 않는다. 내가 만든 this Fiddle, 내 문제의 명확한 예제를 제공해야합니다. 도와 주셔서 감사합니다.Knockout 사용자 정의 바인딩 핸들러에서 HTML로 제공된 메소드 호출

HTML :

<button data-bind="tap: myFunction">Click Me</button> 

JS :

ko.bindingHandlers.tap = { 
    'init': function(element, valueAccessor) { 

     var tap = new Hammer(element); 
     tap.ontap = function(ev){ 
      //call the method provided in HTML, in this case doSomething(); 
      // I've tried calling valueAccessor(); but this doesn't seem to work 
     }; 
    } 
} 

ko.applyBindings({ 
    myFunction: function() { 
     document.write("BAM!"); 
    } 
}); 

답변

1

valueAccessor를 호출 그냥 당신이 바인딩에서 설정 한 개체에 액세스 할 수 있습니다. 함수이기 때문에이를 호출하려면 valueAccessor 호출 결과를 호출해야합니다.

ko.bindingHandlers.tap = { 
    'init': function(element, valueAccessor) { 
     var tap = new Hammer(element); 
     var value = valueAccessor(); // get the value (the function) 
     tap.ontap = function(ev){ 
      //call the method provided in HTML, in this case doSomething(); 
      value(); // call the function 
     }; 
    } 
} 

Updated fiddle

+0

+1 완벽, 감사합니다! –