0

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

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

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

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

  1. 容器触发事件​​。
  2. 孩子抓住了它。
  3. 然后应该创建容器和它的孩子之间的连接。

但是,我唯一能做到的就是在 DynamicEvent 中传递对容器的引用。有没有机会我可以在事件处理函数中访问孩子。或者也许有更优雅的方法来解决这个问题......

任何帮助将不胜感激:)

4

3 回答 3

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

但是,使用您的方法,您是从顶级应用程序触发事件;不是来自任何一个嵌套组件。这让我觉得很不寻常。

我设想你有这样的层次结构:

应用

--- 容器1

--------容器2

我建议从 container2 触发事件并在 container1 中监听它。

您在 Container2 中的调度代码将是这样的:

this.dispatchEvent(new Event('myCustomEvent'));

在 container1 中,您可以监听如下事件:

container2.addEventListener('myCustomEvent', onMyCustomEvent);

如果您确实需要将自定义事件数据添加到您的事件;您可以创建自己的自定义事件类并添加数据。您是否有从应用程序容器触发事件​​的特定用例?我很想听听。

于 2010-05-25T14:04:33.723 回答
0

正如 Flextras 所说,我们已经完成了创建自定义事件,在我们的例子中是 Cairngorm 事件,并实际添加了数据,即对您希望事件响应者回复的容器的引用。不过,我真的不喜欢这样做,因为在极少数情况下,容器可能不处于可以与之交互的状态。在我们的例子中,我们有很多动态加载的模块可以来来去去,然后 WHAM!突然你得到一个空指针异常的 flex 等价物。但这就是您在高度异步、大量空值检查和异常捕获时付出的代价。

于 2010-05-25T14:22:26.690 回答
0

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

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

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

于 2010-05-25T14:40:27.127 回答