学习笔记 FlexBuilder教程中如何使用ActionScript处理事件

FlexBuilder有很多值得学习的地方,本文和大家重点讨论一下FlexBuilder教程中如何使用ActionScript处理事件,相信通过本文的学习你对FlexBuilder中ActionScript处理事件有明确的认识。

专注于为中小企业提供成都网站设计、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业潢川免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

FlexBuilder教程中使用ActionScript处理事件

1,事件模型与机制

FlexBuilder教程中Flex的事件模型基于DOM3事件模型。通过创建注册事件监听器(事件处理程序,事件处理器,是函数方法用于响应指定的事件),可以在组件的实例发出某个事件(如用户何时与界面组件交互,以及在组件的外观或生命周期中何时发生重要的变化,如组件的创建或破坏或调整其大小等)时,对象事件自动派发此事件到所有注册过的监听器。

1)、事件流:

当一个事件被派发出来时,事件对象从根节点开始自上而下开始扫描displaylist(如),一直到目标对象,检查每个节点是否有相应的监听器。目标对象指的是displaylist中产生事件的对象.比如:。如果此时resize了VBox,则会从根(Application)开始,下来检查Panel,HBox,直到目标对象-产生resize事件的VBox为止.

2)、事件的派发:

Flex中可以通过dispatchEvent()方法手工派发事件,所有UIComponent的子类都可以调用此方法.语法://参数event_type是Event对象的type属性
//函数的返回值总是True.
objectInstance.dispatchEvent(newEvent("event_type"):Boolean

可以使用此方法派发任意事件,而不仅仅是用户自定义事件,比如:可以派发一个Button的Click事件.varresult:Boolean=buttonInstance.dispatchEvent(newEvent(MouseEvent.CLICK));

在Flex应用中不是必须对新派发的事件进行处理,如果触发了一个事件,而没有对应的Listener时,Flex忽略此事件.

如果想给Event对象添加新属性,就必须继承Event类,然后定义新属性

3)、事件的传播

FlexBuilder教程中事件触发后,Flex有3个检测事件监听器的阶段,3个阶段的发生的顺序如下:

A.捕获阶段:在捕获阶段,Flex在显示列表中检查事件的祖先是否注册了事件的监听器.Flex从根节点开始顺序而下.大多数情况中,根节点是Application对象.同时,Flex改变事件的currentTarget值.缺省情况下,在此阶段,没有容器监听事件.use_capture参数的值是False,在此阶段添加监听的唯一方法是在调用add_listener时,传入一个为True值的use_capture参数,比如:myAccordion.addEventListener(MouseEvent.MOUSE_DOWN,customLogEvent,true);

如果是在Mxml中添加监听,Flex设置此参数为False,没有办法进行修改.如果设置了use_capture为True,那么事件将不会上浮.如果既想捕获又想上浮就必须调用addEventListener两次.一次use_capture参数为true,一次为false;捕获很少使用,上浮的使用更为普遍.

B.目标阶段:在目标阶段,Flex激发事件的监听程序,不检查其他的节点.

C.上浮阶段:事件只在bubbles属性为True时才进行上浮.可以上浮的事件包括:change,click,doubleClick,keyDown,keyUp,mouseDown,mouseUp.在上浮阶段,Flex改变事件的currentTarget属性,而target属性是初始派发事件的对象.

在任意一个阶段,节点们都有机会操作事件.比如:用户点击了一个在VBox中的Button,在捕获阶段,Flex检查Application对象(根节点)和VBox是否有监听器处理此事件.Flex然后在目标阶段触发按钮的监听器.在上浮阶段,VBox和应用以与捕获阶段相反的顺序再次获得机会处理事件.

在Actionscript3.0中,你可以在任意目标节点上注册事件监听器.但是部分事件会被直接传给目标节点,比如Socket类.捕获阶段的节点顺序是从父节点到子节点的,而上浮阶段刚好相反.

捕获事件缺省是关闭的,也就是说如果要捕获事件,必须显式指定在捕获阶段进行处理.

每一个Event都有target和currentTarget属性,帮助跟踪事件传播的过程.

4)、查询事件阶段

FlexBuilder教程使用事件的eventPhase可以获得事件当前的阶段,

1):CAPTURE_PHASE

2):AT_TARGET

3):BUBBLING_PHASE

示例:privatefunctiondetermineState(event:MouseEvent):Void{Debug.trace(event.eventPhase+":"+event.currentTarget.id);}

5)、停止传播

使用下面两个函数停止事件的传播:

stopPropagation()

stopImmediatePropagation()

2,FlexBuilder教程中如何创建监听器

组件有Flex提供的内建事件.也可以使用派发-监听模型定义自己的事件监听器,并指定监听器监听何种事件.

有三种方式:

1),内部MXML中的AS函数法:在MXML的声明中注册监听器:这是第一个和使用最广泛的方法,在MXML中定义事件发生时会调用的事件处理程序。

2),外部AS文件中的AS函数法:通过ActionScript定义注册事件处理程序:可以通过使用ActionScript中的addEventHandler()等方法来注册事件处理程序。可将addEventHandler()方法置于Application容器的creationComplete事件(在Application表单及其子级被初始化之后,在启动应用程序时发生)的事件处理程序中。详见ActionScript教程。

3),代码混写法:在MXML的控件标签中直接完全嵌入监听器(这也称为使用线上事件处理程序):这样比较直接,代码也较少,但会导致代码很难阅读、维护和缩放。如果监听器是多个AS语句甚至更复杂的逻辑,不推荐此方法。

【编辑推荐】

  1. FlexBuilder教程教你如何使用特效丰富用户体验
  2. 从Flex Builder更名看Flash平台战略
  3. Flex及FlexBuilder2.0开发环境详解
  4. FlexBuilder3.0与Eclipse3.4的完美结合
  5. 学习笔记 FlexBuilder2.0中如何使用基于Lists的控件 

本文名称:学习笔记 FlexBuilder教程中如何使用ActionScript处理事件
转载注明:http://www.mswzjz.cn/qtweb/news15/234965.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能