FLEX事件机制包括:注册事件、触发事件、事件的传递
1、事件注册
1.1 直接指定给函数事件:
<mx:Button id="btnA" label="不传递事件对象的点击" click="onClickA()" />
<mx:Button id="btnB" label="传递对象的点击" click="onClickB(event)">
1.2 使用AS的addEventListener()完成MXML组件的事件注册:
btnB.addEventListener(MouseEvent.CLICK,onClickB);
事件被注册(或者说被添加了侦听器)后,当该事件发生时, 就会调用注册的事件响应函数。
2、事件触发
注册到对象上的事件发生时,就是事件的触发。事件触发后会调用注册在该事件上的事件响应函数,同时创建事件对象的一个实例,该实例会包含事件的信息。比如对事件click的触发,就是当用户使用鼠标点击注册了click事件的对象。
事件触发后,一般经历3个阶段:
2.1 捕获阶段:
FLEX应用是一层一层的关系,比如Application里有一个容器Canvas,而Canvas里有一个VBox,真正发生事件的是VBox里的一个按钮。当用户点击这个按钮时,实际上该事件会经历3个对象,第一个是Application,第2个是Canvas,第3个是VBox,最后才是事件注册的对象按钮。那么click事件自上而下地进行查找点击对象的工作,这个过程就是捕获阶段。
2.2 目标锁定阶段
当自上而下找到事件注册并触发的对象时,FLEX将会自动创建一个Event的实例,这个实例包含着整个事件的相关信息。
2.3 冒泡阶段
与前面捕获阶段相反,冒泡阶段就是事件会向上一级传递。
3、事件传递(关键)
3.1 target和currentTarget的区别:
target:记录事件的源头
currentTarget:记录事件当前传递到的对象
3.2 阻止事件冒泡主要有两个方法:
stopPropogation()和stopImmediateProogation(),当调用任何一个方法的时候,事件的冒泡就会被阻止,事件流将不会向上层传递。
如果当前对象上注册了多个事件,则使用stopPropogation(),因为并不希望当前对象上的其他事件还没执行就被中止。