我有这样的问题:我有2个自定义组件,它们具有自己的嵌套层次结构...一个是另一个容器。我必须彼此“熟悉它们”。我试图实现这一目标的方式是使用全球事件(一方是开火,另一方面正在捕捉):

Application.application.addEventListener("Hello", function (data:Event):void{
        // .. some actions
    });

//and
Application.application.dispatchEvent(new Event(Hello));

一切都很好,但是有一件事。.当我试图参加活动时,我无法访问班级,谁正在赶上它。例如:

  1. 容器发射活动。
  2. 孩子抓住了它。
  3. 然后应创建容器与孩子之间的连接。

但是,我唯一能达到的是传递对动力学中的容器的引用。我有机会在事件处理程序功能上访问孩子吗?也许有更优雅的方法可以解决这个问题...

任何帮助都将不胜感激:)

有帮助吗?

解决方案

在大多数情况下,目标或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!突然,您获得了相当于无效指针异常的弹性。但这是当您高度异步,大量的检查和异常捕获时,您要付出的价格。

您要寻找的事件管理的类型通过像依赖项注入框架一样解决了 伴侣 或者 斯威兹. 。基本上,您需要在全球范围内捕捉事件,然后在整个应用程序中在各种组件中对这些事件进行各种操作。

Mate具有事件图的概念,该概念使您可以映射某些事件以各种方式与您的视图交互。您可以在某些事件发生时将值注入视图属性或在视图中调用方法。

如果您不想使用框架,请查看事件类的气泡属性。当您覆盖事件类以创建自定义事件时,将气泡的默认值设置为 真的. 。这样,无论您在应用程序中嵌套有多深,您的活动都将继续燃烧到主要应用程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top