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

开发 后端
本文向大家介绍一下FlexBuilder教程中如何使用ActionScript处理事件,主要包括事件模型与机制,创建监听器两大部分内容,希望本文介绍能让你有所收获。

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

FlexBuilder教程中使用ActionScript处理事件

1,事件模型与机制

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

1)、事件流:

当一个事件被派发出来时,事件对象从根节点开始自上而下开始扫描displaylist(如),一直到目标对象,检查每个节点是否有相应的监听器。目标对象指的是displaylist中产生事件的对象.比如:<mx:Panel><mx:HBox><mx:VBox><mx:Button/></mx:VBox></mx:HBox></mx:Panel>。如果此时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的<mx:Script></mx:Script>声明中注册监听器:这是第一个和使用最广泛的方法,在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的控件 

 

 

责任编辑:佚名 来源: javaeye.com
相关推荐

2010-08-02 13:47:47

FlexBuilder

2010-08-02 15:39:10

FlexBuilder

2010-08-03 15:44:08

FlexBuilder

2010-08-03 16:13:01

FlexBuilder

2010-08-03 15:30:00

FlexBuilder

2010-08-06 13:22:48

FlexCSS

2009-12-30 10:32:31

Silverlight

2010-08-03 16:03:00

FlexBuilder

2010-08-03 15:36:38

FlexBuilder

2021-02-28 22:12:11

WPF标记Handled

2010-05-18 13:53:34

Subversion插

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用键

2010-08-05 15:40:21

FlexBuilder

2010-08-02 15:26:27

FlexBuilder

2010-08-06 13:30:31

FlexBuilder

2010-05-18 13:26:16

Subversion插

2010-07-30 10:37:23

Flex数据绑定

2010-07-28 09:49:27

FlexBuilder

2010-08-03 13:27:04

FlexBuilder

2011-08-23 17:06:03

点赞
收藏

51CTO技术栈公众号