2011-08-26 2 views
0

Flash/AS3의 이벤트는 표시 목록과 매우 관련이 있습니다. 캡처, 타겟 및 버블 링 단계가 있으며, 무대에서 볼 수있는 객체는 훌륭한 단계입니다.AS3 개념은 비 표시 객체에서 이벤트 버블 링과 유사합니까?

그러나 디스플레이 목록 외부의 비 표시 물체에 대해서도 비슷한 개념이 있습니까?

우리는 객체 B에서 C가 생성되었고 객체 A에서 B가 생성되었고 객체가 표시 객체가 아닙니다. A는 어떻게 C에서 일어나는 일을들을 수 있습니까?

답변

1

당신은 적어도 두 가지 전략을 사용하여 문제를 해결할 수 있습니다 : 이벤트

1) 재발송. 어떤 이벤트를 C이 전달한다고 가정 해보십시오. B에서 우리는이 이벤트를 구독하고 재발 dispatch :

var c:C = new C(); 
c.addEventListener("myEvent", myEventHandler); 

private function myEventHandler (event:Event):void 
{ 
    dispatchEvent(event); 
} 

당신이이 경우에 사용자 정의 이벤트 클래스에 대한 제대로 implement clone()을해야 기억하십시오.

C의 이벤트를 B의 다른 이벤트로 변환하여 발송할 수도 있습니다.

2) C에서 A으로 전달하십시오. interface flash.events.IEventDispatcher을 사용하면됩니다. 다음과 같은

뭔가 :

B에서 :

private var _c:IEventDispatcher; 

public function get innerInstance():IEventDispatcher 
{ 
    return _c; 
} 

public function B() 
{ 
    _c = new C(); 
} 

A에서 : 당신의 대답에 대한

var b:B = new B(); 
b.innerInstance.addEventListener("myEvent", myEventHandler); 
+0

감사합니다! 나는 두 가지 전략이 어떻게 작용하는지 이해하고 있다고 생각한다. 최소한 1)은 나에게 분명하다. 중간 개체 (이 경우 B)가 관련되어야한다는 '정상적인'표시 목록 기반 이벤트 처리의 단점으로 생각합니다. 그러나 어쩌면 더 좋은 대안이 없을 수도 있습니다. "A에서 함수를 호출하는 B에서 함수를 호출하는 C"와 비교할 때 개체가 부모를 알 필요가 없으므로 메서드가 더 나은 것은 물론입니다. – Guppel

+1

다음 코드를 작성하여 코드 행을 저장할 수 있습니다. c.addEventListener ("myEvent", dispatchEvent); – maxmc

+0

@maxmc 와우! 나는 그것에 대해 생각하지 않았다. 나에게 그것은 훌륭한 생각이다! 그것을 가리켜 주셔서 감사합니다! – Constantiner