伙计们,
我对 Flex 的事件处理和调度机制有疑问。
考虑下图,
两个面板 iePanel1
和Panel2
都在同一个应用程序下。
我想在单击Send
按钮时调度一个事件,并能够通过在Receive
按钮上添加事件侦听器来侦听该事件。
我怎样才能做到这一点 ?
PS:因为,AFAIK,只在 Parent Hierarchy 上dispatchEvent
发送事件。是对的吗 ?
谢谢。
伙计们,
我对 Flex 的事件处理和调度机制有疑问。
考虑下图,
两个面板 iePanel1
和Panel2
都在同一个应用程序下。
我想在单击Send
按钮时调度一个事件,并能够通过在Receive
按钮上添加事件侦听器来侦听该事件。
我怎样才能做到这一点 ?
PS:因为,AFAIK,只在 Parent Hierarchy 上dispatchEvent
发送事件。是对的吗 ?
谢谢。
不,你不能。但如果你真的想在不添加太多依赖项的情况下跨视图或组件处理事件,我建议你利用 Parsley 等框架及其消息传递特性。
你不能。事件源自组件并向上冒泡(子到父),从不向下(父到子)或横向(兄弟到兄弟)。
您可以在父应用程序中设置一个事件侦听器,当它从面板 1 接收到事件时,它将调用面板 2 中的某个函数
在接收按钮上添加事件监听器
这里有问题。在按钮代码中添加事件监听器?是自定义按钮吗?即使是这样,按钮也不应该处理事件——它应该是一个简单的构建块,调度它自己的点击事件,而不涉及其他任何事情。
您真正需要的是通知另一个组件的活动。您可以像 kyohiro 建议的那样“使用 Parsley”,或者制作自己的连接器,如下所示:
public class MessageBus extends EventDispatcher {
//singleton facility
private static _instance:MessageBus;
public static get instance():MessageBus {
if (!_instance) _instance = new MessageBus();
return _instance;
}
}
然后您使用此 MessageBus 向其添加事件侦听器 (Panel2) 并通过它调度事件 (Panel1)。这样 Panel1 不知道 Panel2,他们只知道 MessageBus。因此,要连接两个组件,您只需要为每个事件提供唯一的字符串常量。
最简单但不好的做法是 parentApplication.addEventListener 和 parentApplication.dispatchEvent 。为此,您应该使用全局静态调度程序类。