Flex中的Event传递主要有三个阶段:capturing, targeting, bubbling。比如一个Button收到了一个消息,首先会从其根父UI Object上开始逐步Capture直到其父Object,然后由该Button履行Target阶段,最后再以Capture相反的方向Bubble。当然这些阶段都是相对DisplayObject来说的,对于其他的Object比如Socket,Event只会交给Target对象处理。
先来看Capture阶段:
这个阶段是从父到子的一个过程,典型应用:myPanel.addEventListener(MouseEvent.MOUSE_DOWN, clickHandler, true);
注意第三个参数useCapture被设为true,表示clickHandler只想处理Capture过程的事件,如果还想处理bubble阶段的事件,那么必须再以useCapture=false调用一次addEventListener
Flex Develop Guide中有一句话:The capturing phase is very rarely used, and it can also be computationally intensive. By contrast, bubbling is much more common.我还不是特别理解,先写下来再说吧。
再看Target阶段:
这个很简单,由DispatchEvent的对象直接处理。
然后是Bubble阶段。Bubble阶段只有bubbles属性为true的Event才会有这个过程,包括change
, click
, doubleClick
, keyDown
, keyUp
, mouseDown
, and mouseUp等事件。对于自定义事件,bubbles能否设成true还未知,因为它似乎是只读的,还有待验证。