2009-07-09 3 views
4

, 나는 반복되는 이벤트 수신기 수? AS3에서

txtField.addEventlistener(Event.CHANGE, changeCb, false, 0, true); 
txtField.addEventlistener(Event.CHANGE, changeCb, false, 0, true); 

나는 배 리스너를 제거해야합니다 examle

를 들어, 객체에 동일한 이벤트 리스너를 추가하는 경우?

개체의 목록 또는 이벤트 수신기 수는 어떻게 얻을 수 있습니까?

+0

1) 예, 2) 나는 할 수 있다고 생각하지 않습니다. 가능한지 궁금 할 것입니다. 그러나 제 생각에는 정확한 수가 "숨겨져 있습니다". –

+1

글쎄, 나는 정정. 얼마나 많은 청취자가 "듣고 있는지"를 판단하는 방법에 대해 궁금합니다. –

+0

우수한 이벤트 관리자 클래스의 경우 Danny Miller 's를 확인하십시오. http://k2xl.com/wordpress/2008/07/02/as3-eventmanager-class-removealllisteners/ – IneedHelp

답변

7

아니, 당신은 그 상황에 두 번 리스너를 제거 할 필요는 없습니다. 당신이 다른 리스너 함수에 두 개의 이벤트 리스너를 추가하는 경우

  1. :
 

    txtField.addEventlistener(Event.CHANGE, changeCb, false, 0, true); 
    txtField.addEventlistener(Event.CHANGE, changeCb2, false, 0, true); 

  • 경우

      당신은 두 가지 상황에서 여러 리스너를 제거해야 캡처 단계에서 하나의 이벤트가 실행되도록 설정합니다.

     
    
        txtField.addEventlistener(Event.CHANGE, changeCb, false, 0, true); 
        txtField.addEventlistener(Event.CHANGE, changeCb, true, 0, true); 
    
    

    그래서 서로 다른 방식으로 등록 된 이벤트 만 제거하면됩니다.

    Flex에서 제공되는 항목으로 이벤트 리스너를 계산할 수는 없지만 hasEventListener(type)을 사용하여 특정 이벤트 유형에 대한 이벤트 리스너가 있는지 확인할 수 있습니다.

    그러나 제공되는 경우 소스 코드가 있으므로 this blog에서 설명한대로이 기능을 추가하려면 UIComponent 또는 FlexSprite 클래스를 "Monkey patch"할 수 있습니다. 실제로, 당신은 그것을 할 필요조차 없습니다. 코드는 예제에서 제공됩니다. 정말 멋진.

  • +0

    잘 알고 있습니다. 감사. –

    2

    아니요, 두 번 제거 할 필요가 없습니다. 하나의 등록 만 만들 수 있습니다. 또한 weak 참조를 사용하고 있습니다 (마지막 매개 변수 인 useWeakReferences를 true로 설정). 그래서 그것은 추론하기가 더 쉬워집니다.

    동일한 수신기 기능에 대해 두 개의 수신기 등록을 만드는 경우를 설명하는 섹션이 문서에 있습니다.

    http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/EventDispatcher.html#addEventListener()

    관련 문제