有没有办法在某个类上调度事件(Action Script 3.0),每个对象都在该类中并且具有指定的侦听器函数可以捕获该事件? 。例如,我有这样的结构:
编辑(更新课程):
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))
就像你看到我需要调度一个类型的事件而我不需要在每个对象上执行它。
从我的学习中我发现我需要在每个单个对象上调度Event,但是如果我必须为需要监听器的每个对象调度以及用于循环子节点的另一个选项,那么代码将是不整齐的。如果需要监听器,每个对象和添加监听器都无需担心成本效率。 附:对不起我的英文: - )
答案 0 :(得分:0)
我认为事件模型中存在这种行为的标准方法: http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html
捕获阶段(与冒泡相反),但它仍然发生在anscestors(只是以不同的顺序)。鼓励主要动机的事件是支持鼠标事件的特殊性,而不是通过一般事件。单击某个内容时,同时单击两个按钮AND阶段(因此两者都有自然权利处理它)。
您的孩子可以直接订阅父类吗?例如,如果对象对全局鼠标移动感兴趣,则执行以下操作并不罕见:
stage.addEventListener(MouseEvent.MOUSE_MOVE, watchMouse);
同样,你的另一个对象可以:
myBigMainParent.addEventListener(MyEvent.MY_EVENT, anotherObjectLocalHandler);
IMO,这将非常干净:事件发生在一个特定点,但任何地方的任何人都可以订阅它。