2013-06-21 5 views
0

뷰를 렌더링 할 때 이벤트 수신기를 올바르게 추가하는 이유가 확실하지 않지만 다른 이벤트 함수 내부에 이벤트 리스너를 추가하려고하면 정의되지 않고 오류가 발생합니다. 이벤트를 올바르게 추가하려면 어떻게해야합니까?이벤트에서 EventListener 추가 및 제거

해결 방법은 마우스가 눌려져 있는지 여부를 저장하는 변수를 추가하는 것입니다.하지만 이벤트 리스너를 추가하고 제거하는 것만으로 화면이 지워집니다. 또한 혼란의 또 다른 변수에 대한 필요성을 부정합니다.

코드 :

render: function() { 
     //sets up a new Easeljs stage called context 
     Canvas.context.addEventListener("stagemousedown", this.handleMouseDown); 
     Canvas.context.addEventListener("stagemouseup", this.handleMouseUp); 
    }, 

    handleMouseDown: function() { 
     console.log('down'); 
     Canvas.context.addEventListener("stagemousemove", this.handleMouseMove); 
    }, 

    handleMouseMove: function() { 
     console.log('moving'); 
    }, 

    handleMouseUp: function() { 
     console.log('up'); 
     Canvas.context.removeEventListener("stagemousemove", this.handleMouseMove); 
    } 

오류 :

당신은 너무처럼 initialize_.bindAll(this)을 할 필요가
Uncaught TypeError: Cannot read property 'handleEvent' of undefined (09:32:29:386 | error, javascript) 
at b.dispatchEvent (public_html/js/libs/easeljs-0.6.1.min.js:14:447) 
at b._handlePointerMove (public_html/js/libs/easeljs-0.6.1.min.js:88:490) 
at b._handleMouseMove (public_html/js/libs/easeljs-0.6.1.min.js:88:69) 
at c.mousemove.f (public_html/js/libs/easeljs-0.6.1.min.js:87:34) 

답변

1

:

initialize: function() {_.bindAll(this);} 

당신은 아마도 코드를 바인딩 이벤트를 이동해야 인스턴스마다 한 번만 호출되기 때문에 초기화해야합니다. 반면 render이 반복적으로 호출되어 중복 이벤트 핸들러 바인딩이 발생할 수 있습니다.

+0

감사합니다. 내 문제를 해결 한 것 같습니다. 렌더링 함수를 깨끗하고 빠르게 유지하기 위해 이벤트 바인딩을 initialize 함수로 옮겼습니다. – Josh