FLEX事件中几个概念的理解

 

你可以将事件对象本身传递给方法.每当组件触发一个事件,这个组件都会发送一个Event类型的对象,所有事件监听对象都可以接受.例如:

 

1、事件对象。即实际传递时的event,它包含了很多内容,如:event.target.id。

还有人说:event作为一个关键字来使用,而非自定义变量,因此我们可以在标签中直接使用event来创建当前组件所触发的事件对象。

2、target。是指某个事件如mouse.click进行点击的对象,所以一般是按钮等。

3、type。Event的构造函数如下所示。

public function Event(type:String, bubbles:Boolean = false, cancelable:Boolean = false)
参数说明:
type:事件的类型。例如鼠标单击的事件类型为MouseEvent.CLICK。事件的类型可以通过Event.type获得。

this.addEventListener(MouseEvent.CLICK,blackHandler);

4、事件监听器及注册。

软件开发者在开发过程中只关注某个组件响应某个事件后所做的操作,即被驱动的操作,而不用像结构化线形开发那样去关注驱动事件的动作。响应特定事件的组件叫做事件监听器(EventListener)。

注册事件侦听器时,使用EventDsipatcher类中的AddEventLsitener()方法即可。AddEventLsitener()的接口如下所示:
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

type参数表明事件监听器的类型,如鼠标单击事件(MouseEvent.CLICK);listener参数是事件监听器的具体方法;useCapture参数设定是否在事件的捕获阶段就进行响应;priority参数设定事件监听器的优先级;useWeakReference参数设定事件监听器方法是否为弱类型,一个强类型的事件监听器方法是不会被Flex进行自动垃圾收集的。

在MXML中设定事件属性值的方式叫做事件监听器内建。这种方式适合应用在简单的事件处理上。它实际上已经创建了一个默认的事件监听器方法(即省略了addEventListener()方法),并把ActionScript脚本的内容写入方法,但这种方法的最大不足就是无法操作一个以上的事件监听器。

而使用addEventListener方法注册事件监听器的方式,我们可以控制事件响应的捕获方式和优先级;当我们已经添加的事件监听器在程序的运行过程中需要取消掉的时候,我们可以通过removeEventListener方法来实现。而这些功能在事件监听器内建方式中不会被支持,理由也很明了:内建的事件监听器都是匿名的,我们无法引用到匿名监听器的监听实体方法。

 

5、EventDispatcher类

 

事件当然要发生在事件目标上,比如点击按钮时,事件目标就是按钮。在Flex应用中,任何显示列表上的对象都可能成为事件目标,换句话说,都能够触发事件。而这种特性全拜flash.events.EventDispatcher类所赐。

EventDispatcher类实现IEventDispatcher接口,并且是DisplayObject类的基类(DisplayObject 类是可放在显示列表中的所有对象类的基类)。EventDispatcher类允许显示列表上的任何对象都是一个事件目标,而同时,又使得这些对象能够侦听事件。

对于EventDispatcher类来说,“dispatcher(调度)”不是一个好名字,因为EventDispatcher类不仅仅能“调度”事件。EventDispatcher实现了复杂的DOM事件模型,提供了关键的事件方法,通常会使用到的方法包括:

・      addEventListener方法:为EventDispatcher对象注册事件侦听器;

・      dispatchEvent方法:触发事件,也可以称为“调度事件”;

・      hasEventListener方法:检查对象是否为特定事件注册了事件侦听器;

・      removeEventListener:从EventDispatcher对象中删除事件侦听器。

(更多内容参考:http://hi.baidu.com/xoxoxo/blog/item/bea6771ebc6845e41bd57683.html )

 

“只有事件发送者才能侦听事件”,这句话的意思是dispatchEvent对象与addEventListener对象都必须是同一个实例,所发送的事件类型可以是系统自定义的事件也可以是任一类的静态常量。 

       在自定义事件派发与侦听过程中需要注意事件的流程,我们先要做的是建立侦听器(addEventListener),再发送事件,程序在执行dispatchEvent之后立马通知已注册事件侦听的所有对象,如果addEventListener语句在dispatchEvent之后,那么注册该侦听器的对象将无法接到通知。这一点在接收和发送数据时容易出问题,有时候很难弄明白dispatchEvent语句究竟是在什么时候执行的。

 

 

Flex addEventListener增加事件侦听函数时传递多个参数 

原文在这里:http://blog.csdn.net/lujinan858/archive/2009/06/02/4236610.aspx

但是我不是太理解,但其中有个较容易理解的方式,摘录如下:

var sayHello:String = "欢迎光临www.FlashJ.cn -Flash,Ria技术博客";
btn1.addEventListener(MouseEvent.CLICK,function (e:MouseEvent){clickHandlerWithArg(e,sayHello)});
function clickHandlerWithArg(e:MouseEvent,arg:String):void
{
var out:String= e.target + "发出事件(有参数) :" + arg;
trace(out);
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章