2013-03-02 5 views
1

모든 객체 마녀가 해당 클래스에 있고 특정 수신기 기능이 해당 이벤트를 잡을 수있는 일부 클래스에 이벤트 (Action Script 3.0)를 전달할 수있는 방법이 있습니까? .모든 객체에 AS3 dispatchEvent

편집 (갱신 클래스) : 예를 들어, 나는 다음과 같은 구조를 가지고

class example extends EventDispatcher { 
object1 = {subObject1 = {anotherObject1, anotherObbject2}, subObject2} 
object2 = {subObject3} 
object3 

... 
} 

그들 중 일부는 이벤트 리스너가에 내가 원하는 :

anotherObject1.addEventListener(MyEvent.PART3D_CHANGED, function (e: MyEvent){/*do something*/); 
anotherObbject2.addEventListener(MyEvent.PART3D_CHANGED, function (e: MyEvent){/*do something*/); 
object3.addEventListener(MyEvent.PART3D_CHANGED, function (e: MyEvent){/*do something*/); 

이 편집 : 그럼 난 파견 이벤트를 원하는을 이 클래스 내에서 모든 객체 마녀에는 다음과 같이 이벤트를 처리하는 리스너가 있습니다.

this.dispatchEvent(new MyEvent(MyEvent.PART3D_CHANGED)) 

L Ike 당신은 하나의 타입 이벤트를 파견 할 필요가 있고 모든 객체에서 그것을 할 필요는 없다는 것을 알 수 있습니다.

내 연구에서 모든 단일 개체에 이벤트를 디스패치해야하지만 많은 하위 개체가 필요하다는 것을 알아 냈습니다. 필요한 청취자와 어린이를 루핑하기위한 다른 옵션을 모두 파견해야한다면 코드가 어수선 할 것입니다. 리스너를 필요로하는 경우 모든 객체에 대해주의를 기울이지 않고 청취자를 추가하는 것은 비용 효율성이 없습니다. p.s.

+0

내가 원하는 것을 이해하지 못합니다. 이 특별한 이벤트를 듣고 등록 된 다른 이벤트와 함께 이벤트를 실행할 수있는 Object를 갖고 싶습니까? 또는 사용자가 실행할 수있는 사용자 지정 이벤트 개체를 갖고 싶습니까? – philipp

+0

내 질문이 업데이트되었습니다. 내 클래스 예제는 이벤트를 파견해야하고 모든 객체 마녀는 청취자가 그 이벤트를 잡을 수 있어야합니다. – eldi

+0

EventDispatcher를 확장하면 트릭을 수행합니다. var test = new example(); test.addEventListener (, ); 그리고 마지막으로 test.dispatchEvent (새 이벤트 ()); 이벤트를 확장하는 클래스를 만들어 자신 만의 이벤트 유형을 만들 수 있습니다. – philipp

답변

0

:-) 내 영어 죄송합니다 저는 이벤트 모델에서 그런 행동을위한 표준적인 방법이 있다고 생각하지 않는다 : http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html

이 (버블 링의 반대입니다) 상을 포착있다,하지만 여전히 발생 anscestors (다른 순서로). 주된 동기가 버블 링되는 이벤트는 마우스 이벤트의 특수한 특성을 지원하고 일반적인 이벤트를 통과시키지 않았습니다. 당신이 무언가를 클릭하면 버튼과 스테이지를 동시에 클릭합니다 (둘 다 자연스럽게 처리 할 수 ​​있습니다).

자녀가 직접 부모 클래스에 가입 할 수 있습니까? 꽤 깨끗 것,

myBigMainParent.addEventListener(MyEvent.MY_EVENT, anotherObjectLocalHandler); 

을 IMO : 마찬가지로 당신의 anotherObject 할 수

stage.addEventListener(MouseEvent.MOUSE_MOVE, watchMouse); 

을 : 예를 들어, 오브젝트가 글로벌 마우스의 움직임에 관심이있는 경우 다음을 수행하는 것은 드문 일이 아니다 이벤트가 발생 한 특정 지점에 있지만 어디서나 누구든지 그 곳을 구독 할 수 있습니다.