乐博娱乐»Flash»全面认识Flex事件机制

全面认识Flex事件机制

来源:乐博娱乐 宣布时间:2012-03-05 阅读次数:乐博

Flex有许多值得学习的地方,本文就向各人简朴介绍一下Flex事件机制,主要包罗事件流,自界说事件等内容,相信通过本文的简朴介绍你对Flex事件机制一定会有深刻的认识。

Flex事件机制

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

例如在AS3中:

button.addEventListener(“click”,onClick);//向button注册一个click事件
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

Flex事件机制中的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

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

2.创建自界说事件类

PublicclassMyEventextendsEvent{
   ....    
} 

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

来源:xinem csdn.net