我有这样的问题: 我有2个自定义组件,它们有自己的嵌套层次结构......一个是另一个的容器。我必须彼此“熟悉”。我试图实现的方式是使用全局事件(一方是解雇,另一方是抓住):
Application.application.addEventListener("Hello", function (data:Event):void{
// .. some actions
});
//and
Application.application.dispatchEvent(new Event(Hello));
一切都很好,但是有一件事......当我想要抓住这个事件时,我无法访问正在抓住它的类。 E.g:
但是,我唯一可以实现的是在DynamicEvent中传递对Container的引用。我是否有机会在事件处理函数中访问子节点。 或者也许有更优雅的方法来解决这个问题......
非常感谢任何帮助:)
答案 0 :(得分:1)
在大多数情况下,target或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
但是,通过您的方法,您将从顶级应用程序中触发事件;不是来自任何一个嵌套组件。这让我感到不同寻常。
我想你有这样的层次结构:
应用
--- Container1
------- container2的
我建议从container2触发事件并在container1中监听它。
您在Container2中的调度代码将是这样的:
this.dispatchEvent(new Event('myCustomEvent'));
在container1中,你可以听到这样的事件:
container2.addEventListener('myCustomEvent', onMyCustomEvent);
如果您确实需要为活动添加自定义活动数据;您可以创建自己的自定义事件类并添加数据。您是否有一个特定的用例来触发Application容器中的事件?我很乐意听到它。
答案 1 :(得分:0)
我们已经按照Flextras的说法完成了创建自定义事件,在我们的案例中是Cairngorm事件,并且实际上添加了数据,这是对您希望事件响应者回复的容器的引用。我并不喜欢这样做,因为在非常罕见的情况下,容器可能不会处于可以与之交互的状态。在我们的例子中,我们有很多动态加载的模块可以来来去去,然后是WHAM!突然间,你得到一个等效的空指针异常的flex。但这是你在高度异步,大量空检查和异常捕获时付出的代价。
答案 2 :(得分:0)