2012-06-21 6 views
2

.on()을 사용하여 Dojo의 keydown 이벤트를 바인드했습니다. 이벤트가 시작된 후에 이벤트를 바인딩 해제해야하며 아무 것도 작동하지 않는 것 같습니다. 그들의 문서에 따르면 이벤트가 .remove() 메소드를 가진 객체를 반환하지만, 필자는이 메소드에 액세스하거나 적용하는 방법을 생각할 수 없다고 말합니다.Dojo로 이벤트 바인드 해제

도움을 주시면 감사하겠습니다.

감사합니다.

query('#video-topics-input').on('keydown',function(e){ 
     topicsDrop.keyDownFunc(e, e.keyCode); 
    }); 

답변

3

dojo.on은 리스너를 바인드 해제하는 말한 .remove 함수가있는 이벤트 핸들을 리턴합니다. 그러나 귀하의 경우에는 dojo.NodeList에서 작동하는 체인 된 dojo.query를 사용하고 있습니다.

이것은 기본적으로 배열의 관점에서 위의 예는 식별자가 하나 인 배열을 반환한다는 것을 의미합니다. 즉, selector는 ID입니다.

의 EventListener 바인딩하려면 :

var eventHandles = query('#video-topics-input').on('keydown',function(e){ 
     topicsDrop.keyDownFunc(e, e.keyCode); 
}); 

을 그리고 바인딩을 해제하려면 다음 :

eventHandles.forEach(function(handle) { handle.remove() }); 

보다 효율적인 접근 방법은 찾아 볼 쿼리를 사용하지 않는 것 byId

+0

예, 저는 Dojo 초보자입니다 ... 위의 예에서 dom.byId를 사용하여 요소를 선택했습니다. 고맙습니다. – user699242

+0

감사! 내가 성취하기를 원하는 것. – mtchuente

+0

도움이되기를 기쁘게 생각합니다 :) 실제로 나는 보통 'onload'와 'onunload'기능을 가지고 있습니다. 내 개체/페이지에 대한 ctor/dtor 패턴의 일종입니다. 이런 식으로 아약스 응용 프로그램에서 메모리 누수를 제거합니다. – mschr

0

몇 가지 생각 @ mschr의 답변에 추가하려면

내가 언급 한 것처럼 d dojo/dombyid 함수를 사용하여 단일 domNode를 반환해야합니다. 이렇게하면 dojo/ononce 함수를 활용할 수 있습니다. does exactly what it says - 이벤트 처리기를 한 번 실행 한 다음 연결을 끊습니다.

require(['dojo/dom','dojo/on',function(dom,on){ 
    var node = dom.byId('video-topics-input'); 
    on.once(node, 'keydown',function(e){ 
    //some event handler that should only be fired once. 
    }); 
}); 
관련 문제