两个自定义类之间基于事件的交互

时间:2010-05-25 13:36:47

标签: flex globalevent

我有这样的问题: 我有2个自定义组件,它们有自己的嵌套层次结构......一个是另一个的容器。我必须彼此“熟悉”。我试图实现的方式是使用全局事件(一方是解雇,另一方是抓住):

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

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

一切都很好,但是有一件事......当我想要抓住这个事件时,我无法访问正在抓住它的类。 E.g:

  1. Container发射事件。
  2. 孩子咳嗽。
  3. 然后应该创建容器和它的孩子之间的连接。
  4. 但是,我唯一可以实现的是在DynamicEvent中传递对Container的引用。我是否有机会在事件处理函数中访问子节点。 或者也许有更优雅的方法来解决这个问题......

    非常感谢任何帮助:)

3 个答案:

答案 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)

使用依赖注入框架(如MateSwiz)可以很好地解决您正在寻找的事件管理类型。基本上,您需要在全局级别捕获事件,然后在这些事件的各个组件中执行应用程序中的各种操作。

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

如果您不想使用框架,请查看Event类的bubbles属性。当您覆盖Event类以创建自定义事件时,请将bubbles的默认值设置为 true 。这样,无论它们在应用程序中的嵌套程度如何,您的事件都将继续冒泡到主应用程序。