Flex AS3 - 在类之间调度事件

时间:2009-04-22 09:57:12

标签: flex actionscript-3

我以为我在Flex中固定了自定义事件,但似乎没有。我试图通过在类之间调度事件而不是使用可怕的parent.parent.parent语句来松散地耦合我的应用程序。

我在自定义HBox类中有一个ComboBox ...为简单起见我正在做以下

public function onComboBoxChange(event:MouseEvent):void {
    trace("dispatching event");
    dispatchEvent(new Event("hello"));
}

我有一个自定义List类,我想响应该事件......

public function CustomList() {
    //...
    this.addEventListener(FlexEvent.INITIALIZE, onInit);
}

private function onInit(event:FlexEvent):void {
    this.addEventListener("hello", onHello);
}

private function onHello(event:Event):void {
    trace("oh hello");
}

但是从不调用事件监听器。

CustomList和CustomHBox都具有相同的父级。

我的印象是你可以从任何对象调度事件,所有其他活动对象都能听到它。不那么简单吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您的列表需要直接在组合框上调用addEventListener(“hello”),或者组合框需要使用bubbles参数调度事件。

您的事件概念缺少“冒泡”,您可以在Adobe site上阅读有关闪存事件的更多信息。

答案 1 :(得分:1)

如果您的活动出现泡沫,您仍然可以。 CustomList和CustomHBox的父级将为您从onComboBoxChange调度的事件向CustomHBox添加一个事件侦听器。事件处理程序应该在这个父类中,并且它将传递事件/执行需要在CustomList中执行的任何代码,即:

public class Main {

public var customList:CustomList;
public var customHBox:CustomHBox;
//...
public function init():void {
   customHBox.addEventListener(MyCustomEvent.EVENT_NAME, myCustomEventHandler, false, 0, true);
}
//...
public function myCustomEventHandler(event:MyCustomEvent):void {
   customList.update(event.data);
}
//...
}