samtiger


QQ:418148757
Name:yangchuan
数据加载中……
flex基础之事件机制

Flex事件执行流程:
第一阶段为:1:捕获阶段,第二阶段为:(2:目标阶段,3:冒泡阶段)。
所以:addEventListener方法注册的监听器有两种,第一种是处理捕获阶段的监听器(addEventListener的第三个参数useCapture 为true)
第二种就是处理目标和冒泡阶段的监听器(第三个参数useCapture 为false)。

捕获阶段流程:
Flex会去查找事件的触发源,它是通过根显示元素(root display object)逐层向下寻踪,并从上往下,依次触发这些节点的当前事件的处理函数(如果他们都用捕获阶段的监听器注册了这个事件)直到找到事件发起源头的父节点。并触发完父节点的这个事件为止。但它不会调用事件触发源节点的事件。
例如:
test.mxml文件下:
application节点--vbox(id=vb)节点--button(id=bt)节点。


如果在application的creationComplete中:将以上所有组件的click事件注册为捕获监听器。
如:
addEventListener(MouseEvent.CLICK, btnClick2, true); 
vb.addEventListener(MouseEvent.CLICK, btnClick3,true); 
bt.addEventListener(MouseEvent.CLICK, btnClick4,true); 
如果在bt上点击,执行流程如下:
Flash Player会去查找事件的触发源(bt),通过根显示元素(root display object)(这里就是application)逐层向下寻踪,并从上往下,依次调用它们的click事件(如果他们都注册了捕获阶段的click事件)直到找到事件的发起源头的父节点,上面例子中会找到vb,并执行完vb的click事件后,就不再查找下边的bt组件和执行它的click事件。

第二阶段:
一般情况下,第二阶段的目标阶段,也是执行mxml文档的目标节点配置的那个事件处理函数,然后再处理对应的监听器(处理目标和冒泡阶段的监听器)注册的那个处理函数。

 如果文档该节点,没有配置事件处理,则只执行通过addEventListener注册的事件处理方法,否则,如果配置了,就先执行mxml的配置函数处理,接着处理通过监听器注册的函数。

最后就是冒泡阶段:
这个阶段与捕获阶段相反,它会从从目标节点的父节点开始依次向上查找并执行父节点的mxml配置事件和通过监听器注册的事件处理函数。(这些处理函数也是用处理目标和冒泡阶段的监听器注册的)


也就是说:捕获阶段的事件触发只能是用处理这个阶段的监听器去注册。目标和冒泡阶段的事件触发,也只能是处理这个阶段的监听器去注册。如果,要让同一个事件,在捕获阶段或目标和冒泡阶段都执行的话,需要用addEventListener注册两次,将第三个参数useCapture true和false各设置一次。

posted on 2010-04-14 21:41 sam.chuan.yang 阅读(291) 评论(0)  编辑  收藏 所属分类: flex基础


只有注册用户登录后才能发表评论。


网站导航: