我在 Internet 上搜索过,但没有找到任何关于如何执行此操作的线索,知道吗?我不希望 flex 只有 flash(我的对象不是可视组件)。
最佳答案
事件冒泡实际上仅适用于 DisplayObject
层次结构,对于自定义事件,它仅以有限的方式起作用。
这样想:
显示对象有一个父对象(舞台除外)。如果你有一个 child 发送一个事件,那么它可能与包含它的任何东西相关是有道理的。如果我有一个带有特殊按钮的组件,它会调度“foo”事件,我将监听该组件,即使按钮调度了事件。
另一方面,通用 IEventDispatcher
没有父关系。如果我有一个自定义数据对象,而另一个恰好是该对象属性的对象调度了一个事件,那么让容器调度一个事件就没有意义(除非特别告知)。哎呀,包含对象甚至可能不知道包含的对象是一个调度程序!除此之外,如果每次调度私有(private)属性时都调度一个容器,那将在很短的时间内导致递归事件调度和可怕的堆栈溢出。
但是我为什么说它是有限的呢?
MouseEvents 气泡。这很清楚。但是自定义事件通常不会像 MouseEvents 那样冒泡。当 MouseEvent 冒泡时,它有两个阶段,一个捕获阶段和一个非捕获阶段(?不确定它实际上叫什么)阶段。捕获阶段从 root
开始,并进入实际调度 DisplayObject
,而另一个阶段从 DisplayObject
开始,然后按其方式进行到 root
。
我经常发现在从自定义组件分派(dispatch)事件时省略了捕获阶段。这通常一点也不重要,但它确实会影响奇怪的极端情况,因此最好提防。
关于flash - actionscript 3 冒泡可以用于自定义事件和对象层次结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6347251/