Flex事件贯穿我们整个开发,事件分为两类,用户事件和系统事件,比如说我们在页面点击了一个按钮,这是用户触发的事件,当组件初始化完毕,会触发creationComplete事件,这是系统事件。简单的说,用户事件是人触发的,系统事件是flex自身触发的。
事件的传播分为三个阶段,捕获(Capturing)、定标(Targeting)、冒泡(Bubbling),捕获:为事件监听器检查目标对象之前,应用程序将首先为监听器检查所有这一阶段所注册的父容器和祖先容器,定标:应用程序会为目标对象上的监听器进行检查,冒泡:定标之后,应用程序将为监听器检查所有这一阶段所注册的父容器和祖先容器,冒泡是捕获的相反阶段。这三个阶段中,我们要记住两个对象,target和currentTarget,简单的将,target是引发事件的源对象,currentTarget是监听这个事件的对象。通常来说,target和currentTarget是相同的,比如说我们创建了一个按钮,并在按钮上监听了click事件,但是如果不是在按钮上监听了click事件,而是在它的父容器上监听了这个事件,这时target和currentTarget就不同了。
说了这些只是我对Flex事件的浅显理解,无论是否做flex开发的朋友看过来都能够对flex开发有一个直观的认识,下面就一个按钮,介绍一下flex中监听事件的四种方式。
第一种:
<s:Button label="确定" click="Alert.show('确定')" />
第二种;
<s:Button label="确定">
<s:click>
<![CDATA[
Alert.show("确定");
]]>
</s:click>
</s:Button>
这种方式称之为内联,这种方式在flex中被支持的很好,在使用项目渲染器和项目编辑器的时候也可以这种方式使用。不过这种方式个人不推崇,逻辑比较混乱。
第三种:
<fx:Script>
<![CDATA[
import mx.controls.Alert;
protected function submitClickHandler(event:MouseEvent):void
{
Alert.show("确定");
}
]]>
</fx:Script>
<s:Button label="确定" click="submitClickHandler(event)" />
这种方式比较常见,event参数是flex内部帮我们传递的。
第四种:
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.FlexEvent;
//creationComplete事件调用函数
protected function creationCompleteHandler(event:FlexEvent):void
{
submit.addEventListener(MouseEvent.CLICK,submitClickHandler);
}
protected function submitClickHandler(event:MouseEvent):void
{
Alert.show("确定");
}
]]>
</fx:Script>
<s:Button id="submit" label="确定" />
这种方式常用于动态创建组件或者分离方式构建自定义组件的时候使用。