2013-03-02 58 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)) 

大号你看我需要派遣一个类型的事件,我不需要在每个对象上都做。

从我的研究中,我发现我需要在每个对象上调度事件,但有许多子对象,如果我必须为需要侦听器的每个调度器分派代码,并且为循环子项另一个选项的每个对象和添加监听器而不必在乎是否需要监听器将没有成本效率。 p.s.对不起,我的英语:-)

+0

我不明白你想要什么。你是否想要一个可以通过注册其他注册事件来触发事件的对象,聆听这个特殊事件?或者你想拥有一个可以触发的自定义事件对象? – philipp 2013-03-02 10:21:01

+0

我更新了我的问题。我需要我的类示例派发事件和每个对象女巫都有听众可以捕捉到事件 – eldi 2013-03-02 10:30:05

+0

扩展EventDispatcher做的伎俩。 var test = new example(); test.addEventListener();最后test.dispatchEvent(新事件());您可以通过创建扩展事件的类来创建自己的事件类型。 – philipp 2013-03-02 10:37:23

回答

0

我不认为有在事件模型这样的行为标准的方式: http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html

有捕获阶段(这是冒泡的相反),但它仍然发生了这些anscestors(只是以不同的顺序)。鼓吹主要动机的事件是为了支持鼠标事件的特殊性,而不是传递一般事件。当你点击某个东西时,你同时点击按钮和舞台(所以两者都有自然的权利来处理它)。

您的孩子可以直接订阅父类吗?例如,这种情况并不少见做到以下几点,如果对象是有兴趣在全球移动鼠标:

stage.addEventListener(MouseEvent.MOUSE_MOVE, watchMouse); 

同样你anotherObject可以这样做:

myBigMainParent.addEventListener(MyEvent.MY_EVENT, anotherObjectLocalHandler); 

IMO,那将是很干净:事件发生在一个特定的点上,但任何来自任何地方的人都可以订阅它。