由Flex消息机制说开去

来源:互联网 发布:java游戏制作的书 编辑:程序博客网 时间:2024/05/22 08:28

在Flex开发过程中,遇到这样一个问题,场景如下:

  1. 接到新需求,需要将特定分类下Item添加到容器里,每个Item需要配上对应的图标,要求占击Item和图标都要做同样的处理。
  2. Item和 图标类本身已经有对应点击的事件监听函数。

其实Flex本身我也是半路出家,按照以前的思路就是设置监听函数,接受图标发出的事件响应,完成处理。由于项目进度不是很急,突然想到JS在DOM处理时支持捕获事件和冒泡事件两种模型,从父->子->父,所以想Flex是不是也是同样的机制。如果猜想正确的话,就可以能过设置让Item直接处理事件。


Flex消息处理分三个阶段, 捕获(capture),执行(target) 和冒泡(bubble) 。

  1. 捕获(capture):在这个阶段,Flash Player会去查找事件的触发源,它是通过根显示元素(root display object)逐层向下寻踪,直到找到事件的发起源头。在这个阶段监视器(listener)默认是不会收到任何消息的(默认只在target和bubble阶段收到 消息)。
  2. 目标执行阶段(target)
  3. 冒泡阶段(bubble):最后的这个阶段其实就是第一个阶段的逆向过程。它就是在事件代码执行完毕后通过子元素逐级向父元素发出该事件,一直到根元素。在这个阶段你不需要特别的为监听器指定什么,你只要正常的注册事件就可以了。监听器会在该阶段收到通知。但前提是该事件是能够bubble的。

如果你想在捕获阶段让listener收到消息并有所动作,那么你可以在注册的时候改变第三个参数为true,如下面的方法:object.addEventListener(MouseEvent.CLICK, onClick, true);


明白原理很重要,可以使事情事半功倍。




 

0 0
原创粉丝点击