flex 中什么时候就要用到事件流机制?希望有心人士能详细解释。
2个回答
展开全部
Flex针对事件的处理分为两侧,一侧是产生和抛出(dispatch)事件,另一侧是监听和消费事件,这两侧是多对多的关系.
事件的流转通常被划分为三个阶段:捕获阶段,命中阶段和冒泡阶段.
在捕获阶段,Flash Player会自顶向下地检查是否存在事件对应的监听,直到抛出事件的目标对象的父容器为止.如果这些父对象上面存在对应的监听,且监听器的use_capture参数设置为true时,就会调用对应的回调函数.
在命中阶段,Flash Player会检查抛出事件的目标对象自己是否存在对应的监听,如果发现对应的监听,则会调用对应的回调函数.
在冒泡阶段,,Flash Player首先会检查事件本身的bubbles属性是否为true,如果为true,则会从抛出事件的目标对象的父容器开始,自下向上地检查是否存在对应的监听,如果这些父对象上存在对应的监听,就会调用对应的回调函数.
Flex内建的事件主要位于三个包下面:spark.events.*,mx.events.*,flash.events.*.
addEventListener的语法如下:
componentInstance.addEventListener(
event_type:String,
event_listener:Function,
use_capture:Boolean,
priority:int,
weakRef:Boolean
)
需要注意的是,use_capture参数是指定对应的监听器在事件流转的哪个阶段起作用,如果设置为true,监听器会在事件的捕获阶段生效;如果设置为false,监听器则不会在捕获阶段生效,而在命中和冒泡阶段生效.它的默认值通常是false.
如果想要一个监听器能够在事件流转的所有阶段生效,就必须调用addEventListener两次,一次设置use_capture为true,另一次设置use_capture为false.
priority参数指优先级,优先级高的监听器会被首先执行,如果多个监听器的优先级相同或者都没设置优先级,则按照它们的添加顺序来执行.它的默认值是0,可以设置为正数或者负数.
当抛出事件的目标对象不在显示列表中时,事件是不会经过三个阶段的,比如派发给Socket类的事件,就只有命中阶段,而没有捕获或者冒泡阶段.
事件对象拥有两个属性:target和currentTarget.target是抛出事件的目标对象,而currentTarget是事件流当前的停留对象--即对此事件注册监听的对象.
stopPropagation()和stopImmediatePropagation()的区别在于,stopPropagation()
不会阻止当前节点的其他监听器执行,而stopImmediatePropagation()会阻止当前节点的其他监听器执行.两者都阻止了事件流向下一个节点.
事件的流转通常被划分为三个阶段:捕获阶段,命中阶段和冒泡阶段.
在捕获阶段,Flash Player会自顶向下地检查是否存在事件对应的监听,直到抛出事件的目标对象的父容器为止.如果这些父对象上面存在对应的监听,且监听器的use_capture参数设置为true时,就会调用对应的回调函数.
在命中阶段,Flash Player会检查抛出事件的目标对象自己是否存在对应的监听,如果发现对应的监听,则会调用对应的回调函数.
在冒泡阶段,,Flash Player首先会检查事件本身的bubbles属性是否为true,如果为true,则会从抛出事件的目标对象的父容器开始,自下向上地检查是否存在对应的监听,如果这些父对象上存在对应的监听,就会调用对应的回调函数.
Flex内建的事件主要位于三个包下面:spark.events.*,mx.events.*,flash.events.*.
addEventListener的语法如下:
componentInstance.addEventListener(
event_type:String,
event_listener:Function,
use_capture:Boolean,
priority:int,
weakRef:Boolean
)
需要注意的是,use_capture参数是指定对应的监听器在事件流转的哪个阶段起作用,如果设置为true,监听器会在事件的捕获阶段生效;如果设置为false,监听器则不会在捕获阶段生效,而在命中和冒泡阶段生效.它的默认值通常是false.
如果想要一个监听器能够在事件流转的所有阶段生效,就必须调用addEventListener两次,一次设置use_capture为true,另一次设置use_capture为false.
priority参数指优先级,优先级高的监听器会被首先执行,如果多个监听器的优先级相同或者都没设置优先级,则按照它们的添加顺序来执行.它的默认值是0,可以设置为正数或者负数.
当抛出事件的目标对象不在显示列表中时,事件是不会经过三个阶段的,比如派发给Socket类的事件,就只有命中阶段,而没有捕获或者冒泡阶段.
事件对象拥有两个属性:target和currentTarget.target是抛出事件的目标对象,而currentTarget是事件流当前的停留对象--即对此事件注册监听的对象.
stopPropagation()和stopImmediatePropagation()的区别在于,stopPropagation()
不会阻止当前节点的其他监听器执行,而stopImmediatePropagation()会阻止当前节点的其他监听器执行.两者都阻止了事件流向下一个节点.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询