2012-03-19 2 views
0

eventListener 이벤트를 발생시키는 객체에 어떻게 액세스합니까?AS3에서 eventListener 이벤트를 발생시키는 객체를 어떻게 복구 할 수 있습니까?

의가 나는 MC 있다고 가정 해 봅시다 :

element.addEventListener(MouseEvent.CLICK, elementEventHandler); 

그리고, 이벤트 핸들러에서, 내 엠씨에 무언가를 추가 할 :

EventListener를있다

var element = new MovieClip(); 

function elementEventHandler(event:MouseEvent):void 
{ 
    var b1:balloon = new balloon("ballon1"); //this is another class. 

    event.target.addChild(b1);//this doesn't work. 
} 

그래서 내가 원하는 것은 ... 이벤트를 해고하고 그걸로 미친 짓을하는 객체를 복구하십시오 (이 예를 들어, 다른 객체를 추가하십시오.)

아무도 아이디어가 있다면, 미리 감사드립니다!

pd : 예,이 스 니펫에서 var 요소를 직접 사용할 수 있지만 실제 코드에서는 XML 파일에 따라 반복으로 mcs를 생성합니다.

답변

1
function elementEventHandler(event:MouseEvent):void 
{ 
    // use the as-operator to cast the target into the class you need 
    var element:DisplayObjectContainer = e.target as DisplayObjectContainer; 

    // if the cast fails, element will be null, then we bail 
    if(!element) return; 

    // then, create your child and add it 
    var b1:balloon = new balloon("ballon1"); 
    element.addChild(b1); 
} 
+0

3 이벤트 스펙 DOM 레벨에서

체크 아웃 이벤트 흐름 캡처, 대상 및 버블 링 단계가 어떻게 작동하는지 이해하기 안녕하세요, 답장을 보내 주셔서 감사합니다. 이 접근 방식으로 런타임 오류가 발생합니다 : Loader 클래스가 flash.display :: Loader/addChild()에서이 메서드를 구현하지 않습니다. addchild가 DisplayObjectContainer와 제대로 작동하지 않는 것 같습니다. –

+0

예, AS3에서 매우 새로 생겼습니다. 참조를 확인했는데 DisplayObjectContainer가 모든 시각적 컨테이너 클래스의 기본 클래스라는 것을 이해했습니다. 그래서 addchild()가 DisplayObjectContainer 메소드이므로 왜이 오류가 발생하는지 알 수 없습니다. –

+1

나는 알아 냈다 !! "DisplayObjectContainer as event.target"대신 "event.currentTarget as DisplayObjectContainer"를 사용했습니다. 지금 나는 그 차이를 이해하려고 노력하고있다. 고마워요! –

0

오류를 얻고있는 이유는 이벤트가 해당 하위 개체 중 하나를 대신 element에서 직접 오는 것이 아니라 것을 아마.

"click"은 버블 링 이벤트입니다. 그래서 여기에 내가 어떻게 할 것인지의

http://www.w3.org/TR/DOM-Level-3-Events/#dom-event-architecture

을 :

function elementEventHandler(event:MouseEvent):void 
{ 
    if (event.target != event.currentTarget) 
     // If event is not from "element", ignore it. 
     return; 

    ... 
} 
관련 문제