0

我有一个flex组件的代码,我想监听一个事件,事件的来源是另一个类正在运行的另一个类运行的自定义类等等。我的印象是一个事件将通过在整个应用程序,所以我希望如果我派遣在像这样的类自定义事件..一个事件能走多远,我该如何听?

private function finishEvent():void { 
     var evt:EventDispatcher = new EventDispatcher; 
     var finished:Event = new Event("finishedInterpret"); 
     evt.dispatchEvent(finished); 
    } 

然后我可以抓住它在我的部分是这样的:

public function interpret(data:Array):void { 
    addEventListener("finishedInterpret", applyInferences); 
    db.executeBatch(); 
} 

事件在executeBatch完成时基本被触发,finishEvent被调用,但我是l istener没有得到任何东西。我试着将它设置为db.addEventListener,但现在已经有效。

回答

1

事件应该发生的方式是对象调度事件,而这些事件的消费者监听来自该对象的事件。除非您有全局事件分派器(不是典型的),否则没有应用程序范围的事件分派。

我发现这是最好的使用模式:子组件调度事件,以及这些孩子的所有者监听他们的事件。例如:

child.addEventListener("finishedInterpret", applyInferences); 

由于是,你的代码是侦听来自自身事件

+0

啊我明白了。不幸的是,我正在使用的那个类中的组件确实已经完成,它几乎被埋在了几个级别的调用中。所以我基本上必须将事件传递到每个级别,然后我想.. hrmph希望不要必须大量修改该代码 – Damon 2011-03-29 23:05:29

+0

您可以使用事件冒泡。这将允许事件通过多层传播到显示树中的第一个监听祖先。 – Jacob 2011-03-29 23:13:21

+0

啊..我以为这是默认启用。当我尝试将气泡设置为true时,它是只读属性 – Damon 2011-03-29 23:23:52