Apache flex 在不使用框架的情况下处理flex事件?

Apache flex 在不使用框架的情况下处理flex事件?,apache-flex,event-handling,event-listener,Apache Flex,Event Handling,Event Listener,我正在用Flash Builder 4 Beta 2(夜间SDK)开发一个AIR应用程序,我没有使用mate这样的框架。我的应用程序中有几个视图和组件。大纲可能如下所示: root |- mainview |-- toolbar |-- catalogue view |--- tree |--- datagrid |-- statusbar 这不是我项目的100%结构,但作为一个例子可能就足够了。当应用程序get初始化时,树将加载它的数据,在我的例子中,这是一个类别列表。当用户单击树中的项目时

我正在用Flash Builder 4 Beta 2(夜间SDK)开发一个AIR应用程序,我没有使用mate这样的框架。我的应用程序中有几个视图和组件。大纲可能如下所示:

root
|- mainview
|-- toolbar
|-- catalogue view
|--- tree
|--- datagrid
|-- statusbar
这不是我项目的100%结构,但作为一个例子可能就足够了。当应用程序get初始化时,树将加载它的数据,在我的例子中,这是一个类别列表。当用户单击树中的项目时,datagrid的数据将加载

每次单击树项目时,我都会发送一个事件。此事件冒泡并携带已单击项目的VO。现在我想让我的datagrid捕捉这个事件。当前,我按如下方式注册此事件的事件侦听器(使用类和函数):


此代码在datagrid的创建完成侦听器中执行。不知何故,这对我来说似乎有点麻烦(尽管它能工作)。或者在顶级应用程序中注册组件的事件侦听器是一种常见的技术?

是的,这是一个非常好的解决方案。一些框架将事件监听器添加到最顶端的显示对象,如Mate和Swiz,因此它们可以完全做到这一点。看看这张照片就知道了。Swiz使用类似的方法,加上Cairngorm样式的CentralDispatcher用于非显示对象全局事件:

如果要全局侦听显示对象事件,最好在顶级应用程序上注册事件侦听器;任何其他的事情都会让事情变得太复杂而难以理解。这些框架倾向于通过元数据(Swiz、Cairngorm 3、Parsley)和事件映射(Mate)将所有这些从您身边抽象出来

FlexGlobals.topLevelApplication.addEventListener(eventName, this.eventHandler);