题
我有这样的问题:我有2个自定义组件,它们具有自己的嵌套层次结构...一个是另一个容器。我必须彼此“熟悉它们”。我试图实现这一目标的方式是使用全球事件(一方是开火,另一方面正在捕捉):
Application.application.addEventListener("Hello", function (data:Event):void{
// .. some actions
});
//and
Application.application.dispatchEvent(new Event(Hello));
一切都很好,但是有一件事。.当我试图参加活动时,我无法访问班级,谁正在赶上它。例如:
- 容器发射活动。
- 孩子抓住了它。
- 然后应创建容器与孩子之间的连接。
但是,我唯一能达到的是传递对动力学中的容器的引用。我有机会在事件处理程序功能上访问孩子吗?也许有更优雅的方法可以解决这个问题...
任何帮助都将不胜感激:)
解决方案
在大多数情况下,目标或CurrentTarget将使您访问正在启动事件的组件。
http://livedocs.adobe.com/flex/3/langref/flash/events/event.html http://livedocs.adobe.com/flex/3/langref/flash/events/event.html#currenttarget http://livedocs.adobe.com/flex/3/langref/flash/events/event.html#target
但是,通过您的方法,您正在从顶级应用程序发射活动;不是来自您的任何一个嵌套组件。这让我感到不寻常。
我设想您有这样的层次结构:
应用
---容器1
-------容器2
我建议从Container2发射活动并在Container1中聆听。
您在Container2中的调度代码将是这样的:
this.dispatchEvent(new Event('myCustomEvent'));
在Container1中,您可以收听类似的事件:
container2.addEventListener('myCustomEvent', onMyCustomEvent);
如果您确实需要将自定义事件数据添加到您的事件中;您可以创建自己的自定义事件类并添加数据。您是否有特定的用例来发射应用程序容器的事件?我很想听听。
其他提示
正如Flextras所说,在我们的情况下,创建自定义事件,实际上添加了数据,引用了您希望事件响应者回复的容器。不过,我真的不喜欢这样做,因为在很少见的情况下,容器可能无法与之交互的状态。在我们的情况下,我们有很多动态加载的模块可以来去去,然后wham!突然,您获得了相当于无效指针异常的弹性。但这是当您高度异步,大量的检查和异常捕获时,您要付出的价格。