我以为我在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都具有相同的父级。
我的印象是你可以从任何对象调度事件,所有其他活动对象都能听到它。不那么简单吗?
谢谢!
答案 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);
}
//...
}