Flex事件机制用法指南

开发 后端
你对Flex事件机制的工作流程是否熟悉,Flex事件机制是观察者模式,即首先要注册事件,事件分发后通过事件响应函数进行处理。

本文和大家重点讨论一下Flex事件机制,在学习Flex的过程中这是必然要遇到的问题,Flex事件机制是观察者模式,即首先要注册事件,事件分发后通过事件响应函数进行处理。洗完本文介绍对你有所帮助。

Flex事件机制

Flex事件机制是观察者模式,即首先要注册事件,事件分发后通过事件响应函数进行处理。

例如在AS3中:
 

  1. button.addEventListener(“click”,onClick);//  
  2. 向button注册一个click事件  
  3. internalfunctiononClick(evt:MouseEvent):void{txt.text=“clickabutton!”;}//事件响应函数 

那么注册事件注册什么呢?通过addEventListener注册函数的参数可以看出,首先需要注册事件类型(***个参数),然后注册响应函数,即事件发生后需要做什么事情,也就是说调用哪一个方法。

那么响应函数需要什么要求呢?响应函数必须要一个参数,指明注册的事件的事件类型,如上面的例子,我们注册的是一个鼠标事件类型,即鼠标单击事件。
注册的事件类型必须和响应函数的事件类型一致!到底有哪些事件类型呢?除了有系统默认的事件类型外,我们可以定义自己的事件和事件类型。简单的说,事件类型就是定义在事件类的常量属性。

Flex事件机制中的事件流

1.捕获阶段(从根节点到子节点,检测对象是否注册了监听器,是则调用监听函数)
2.目标阶段(调用目标对象本身注册的监听程序)
3.冒泡阶段(从目标节点到根节点,检测对象是否注册了监听器,是则调用监听函数)
注:事件发生后,每个节点可以有2个机会(2选1)响应事件,默认关闭捕获阶段。
从上到下(从根到目标)是捕获阶段,到达了目标后是目标阶段,然后从目标向上返回是冒泡阶段。

怎样理解事件流?

当事件发生时,FLEX通过事件的分发器EventDispatcher进行事件分发,分发的顺序是:从上往下到达目标,然后从下往上,从目标开始返回。如上面1、2、3所说的那样,这里就会有一个问题,在事件的流经过程中,不是目标的对象如果注册了事件,也有了相应的事件响应函数,那么不是目标的对象响应了事件的处理,这怎么办呢?
由于上面说的那样,addEventListener在只有如上两个参数的牧人情况下是关闭捕获阶段的,也就是说事件流是从目标阶段开始的,然后是冒泡阶段,当出现容器包含控件的时候,可以使用判断if(evt.target==evt.currentTarget)来确定当前事件流上的当前流经对象是否就是目标对象,如果是就进行相应的处理。

移除对象的事件流:removeEventListener(),参数与注册事件相同。
阻断事件流中目标对象的后继事件,即通过了目标阶段后阻止冒泡阶段:
event类的方法:publicfunctionstopImmediatePropagation():void

Event类

Event类作为创建Event对象的基类,当发生事件时,Event对象将作为参数传递给事件侦听器。如MouseEvent、KeyboardEvent,更多的可以查参考手册。
Event类有几个常用的公共属性:
◆是否冒泡:bubbles;
◆目标对象:target;
◆所处阶段:eventPhase;
◆当前对象:currentTarget;
从参考手册可以event类的构造函数:

Event()构造函数publicfunctionEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false)
创建一个作为参数传递给事件侦听器的Event对象。
参数type:String—事件的类型,可以作为Event.type访问。
bubbles:Boolean(default=false)—确定Event对象是否参与事件流的冒泡阶段。默认值为false。
cancelable:Boolean(default=false)—确定是否可以取消Event对象。默认值为false。
在flash.events包中可以看见系统自带的事件。

如何自定义事件

Flex事件机制中的自定义事件,也就是向监听器传递自己定义的事件类型,同时可以通过事件传递参数。

1.创建自定义事件名称的Event
 

  1. dispatchEvent(newEvent(“myEvnet”,true,false)); 

2.创建自定义事件类
 

  1. PublicclassMyEventextendsEvent{  
  2. ….  

dispatchEvent是EventDispatcher的方法:publicfunctiondispatchEvent(event:Event):Boolean将事件调度到事件流中。事件目标是对其调用dispatchEvent()方法的EventDispatcher对象。
这句话就是说是哪个对象调用dispatchEvent(),那么该事件就会被分发到那个对象的事件流中,如果没有指明对象,那么默认为this对象,即应用程序。这时该事件被分发到应用程序对象的事件流中,而没有分发到特定对象的事件流中。一旦两个对象的不是父子关系(控件树),那么事件流不会在这两个对象之间有联系,那么事件不会被响应;如果是,则还是要响应。(这种情况dispatchEvent的参数Event对象的参数必须是三个,如上)。dispatchEvent就是说明有了新的事件,只要注册了该事件,就可以响应。

【编辑推荐】

  1. 解析Flex事件机制的三个阶段
  2. 深入剖析Flex事件机制
  3. 解析Flex事件执行流程
  4. FlexBuilder3.0与Eclipse3.4的***结合
  5. 学习笔记 FlexBuilder2.0中如何使用基于Lists的控件 

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-08-13 11:34:54

Flex自定义事件

2010-08-12 15:20:49

Flex Builde

2010-08-09 12:42:16

Flex module

2010-07-30 10:13:38

Flex控件

2010-07-28 14:59:26

Flex字符串

2010-08-05 10:29:11

Flex效果

2010-07-27 10:19:28

Flex

2010-08-03 10:40:29

Flex代码格式化

2010-08-13 12:54:20

Flex弹出窗口

2010-08-06 09:45:50

Flex事件机制

2013-02-18 13:44:22

CSSSASSWeb

2010-07-26 17:09:00

Perl模块

2010-07-26 14:54:07

Perlsplit函数

2010-07-26 15:27:50

Perl foreac

2010-08-10 14:18:15

RationalFunFlex

2010-07-21 10:10:50

Perl split函

2010-08-16 15:11:02

DIV

2010-07-23 15:51:27

Perl开发工具

2010-07-21 09:38:51

2010-07-19 15:25:39

Perl标量转换函数
点赞
收藏

51CTO技术栈公众号