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

Apache flex 两个自定义类之间基于事件的交互,apache-flex,globalevent,Apache Flex,Globalevent,我有这样的问题: 我有两个自定义组件,它们有自己的嵌套层次结构。。。一个是另一个的容器。我必须让他们彼此“熟悉”。我试图实现这一目标的方式是使用全局事件(一方开火,另一方捕获): 一切都很好,但有一件事。。当我试图捕捉事件时,我无法访问该类,谁在捕捉它。例如: 容器触发事件 孩子把它弄坏了 然后应该创建容器与其子容器之间的连接 但是,我唯一能做的就是在DynamicEvent中传递对容器的引用。是否有可能在事件处理程序函数中访问子级。 或者也许有更优雅的方法来解决这个问题 任何帮助都将不胜感激:

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

一切都很好,但有一件事。。当我试图捕捉事件时,我无法访问该类,谁在捕捉它。例如:

  • 容器触发事件
  • 孩子把它弄坏了
  • 然后应该创建容器与其子容器之间的连接
  • 但是,我唯一能做的就是在DynamicEvent中传递对容器的引用。是否有可能在事件处理程序函数中访问子级。 或者也许有更优雅的方法来解决这个问题


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

    在大多数情况下,target或currentTarget都可以让您访问触发事件的组件

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

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

    this.dispatchEvent(new Event('myCustomEvent'));
    
    container2.addEventListener('myCustomEvent', onMyCustomEvent);
    
    应用

    ---集装箱1

    -------集装箱2

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

    Container2中的调度代码如下所示:

    this.dispatchEvent(new Event('myCustomEvent'));
    
    container2.addEventListener('myCustomEvent', onMyCustomEvent);
    
    在container1中,您可以监听如下事件:

    this.dispatchEvent(new Event('myCustomEvent'));
    
    container2.addEventListener('myCustomEvent', onMyCustomEvent);
    

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

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

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

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


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

    您好,谢谢您的回复。是的,我听说过当前目标和通常的射击事件。下面是我使用全局事件的原因:假设我有一个具有动态内容的表单(不同数量的容器,有时具有相当深的嵌套层次结构)。除了控件之外,还应该接收“myCustomEvent”还有几十个其他控件(为了更好的外观和其他目的)。。。假设我应该从这些元素中提取一组元素,并“提取”到它们的链接。。因此,我只是使用内置侦听器创建所需的容器。然后启动给定的事件使它们弹出。我不确定我是否理解您描述的用例。我的直觉告诉我,如果必须在应用程序级别调度事件;您可能会从重构中受益。您的直觉似乎工作正常:)问题以另一种方式解决了。。我只是好奇(出于某种原因)我是否曾经需要这样做——可能吗?理论上,在应用程序上发送和收听事件应该是可行的;但我从未测试过这种方法。您好,我在向事件传递附加数据时没有遇到任何问题。我同意你的观点,全球事件是解决问题的一种混乱的方式,但就我而言,我有你在最后列出的东西。。如果有更干净的方法-我很想听听..您好,谢谢您的回复。我已经考虑过Mate框架,但我认为它的任务太小,无法添加框架。也在玩“泡泡”。。无论如何,这个问题是以完全不同的方式解决的。。现在,为了满足我的好奇心:似乎不可能获得对对象的引用,谁在处理在应用程序级别调度的事件?