2012-06-07 5 views
0

이런 식으로하고 싶습니다.jQuery에서 메소드를 구독하려면 어떻게해야합니까?

var foo = function() { 
    this.run = function() { 
     alert('got'); 
    } 
    this.init = function() { 
     this.run(); 
    } 
    this.init(); 
}; 

window.onload = function() { 
    var f = new foo(); 
    $(f).bind('run', function() { // this doesn't work 
     alert('ran!'); 
    }); 
};​ 

그래도 작동하지 않습니다. 다른 객체의 메소드를 구독하려면 어떻게해야합니까?

+0

f.run이 실행될 때 alert ('ran!'); –

답변

7

이벤트 처리기를 함수에 직접 바인딩 할 수 없습니다. 이벤트 처리기를 이벤트에 바인딩 할 수 없습니다!

this.run = function() { 
    // Trigger an event called "run" 
    $(this).triggerHandler('run'); 

    // ... 
}; 

지금이 이벤트에 가입 할 수있어 이미했던 방법 :이 이벤트를 작동

var f = new foo(); 
$(f).on('run', function() { ... }); // "bind" is fine as well 

이 후 트리거를 당신은 실행에서 사용자 지정 이벤트를() 트리거해야합니다 핸들러가 바인드되었으므로 생성자에서 트리거 된 이벤트는 대부분 catch되지 않습니다.

+0

을 실행하려면 jsfiddle에 넣으십시오. 예상대로 작동하지 않습니다. http://jsfiddle.net/uwN4b/1/ –

+1

답변에 약간을 추가했습니다. 여기에 일하는 바이올린이 있습니다 : http://jsfiddle.net/7PHyA/1/ - 두 번 "얻을"것이지만 "도망 쳤습니다!" onces 만. 이는 처음 이벤트를 트리거 한 후 이벤트 핸들러가 바인드되기 때문입니다. – Niko

관련 문제