10.3.3 管理事件监听器

上一篇 / 下一篇  2009-04-11 16:52:45

10.3.3 管理事件监听器

除了创建事件监听器和调度事件之外,还可以使用EventDispatcher类提供的其他方法,对创建的事件监听器进行检查和删除等操作。

1.检查事件监听器

使用EventDispatcher类的willTrigger()hasEventListener()方法,可以检测显示对象是否存在相应类型的事件监听器。如果在显示对象上发现特定事件类型的事件监听器,hasEventListener()方法将返回truewillTrigger()方法也会返回true,并且willTrigger()方法不但检查该显示对象上的监听器,还会检查该显示列表对象,在事件流所有阶段中的所有父级上的监听器。

这里只介绍hasEventListener()方法。该方法的语法定义如下:

public function hasEventListener(type:String):Boolean

参数type表示需要检查的事件类型。

下面创建一个检查事件监听器的示例,如代码10.4所示:

代码10.4 检查事件监听器

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initapp()">

<mx:Script>

        <![CDATA[

                  import mx.controls.Alert;

                  //初始化程序

                  public function initapp():void

                  {

                           //添加事件监听器

                           but2.addEventListener(MouseEvent.CLICK,clickhandler);

                  }

                  //结果处理函数

                  public function clickhandler(e:Event):void

                  {

                           Alert.show("你选择了"+e.type+"操作");

                  }

                  public function check():void

                  {

                           //检查事件监听器

                           if(but2.hasEventListener(MouseEvent.CLICK))

                           {

                                    Alert.show("【确定】按钮有单击事件监听器");

                           }

                           else

                           {

                                    Alert.show("【确定】按钮没有单击事件监听器");

                           }

                  }

        ]]>

</mx:Script>

<mx:Button id="but2" label="确定" x="56" y="94"/>

<mx:Button id="but1" label="检查" click="check()" x="151" y="94"/>

</mx:Application>

在上述代码中,创建函数check(),在该函数中使用hasEventListener()方法检查按钮but2是否存在单击事件的事件监听器。设置按钮but1click事件调用函数check()。具体的运行效果如图10-7所示。

10-7 检查事件监听器

2.删除事件监听器

在程序开发过中,创建一个事件监听器之后,该事件监听器会一直工作,当事件监听器不再需要时,需要使用removeEventListener()方法进行删除。

removeEventListener()方法的语法定义如下所示:

public function removeEventListener(type:String,listener:Function,useCapture:Boolean=false):void

各参数说明:

l        type:String 事件的类型。

l        listener:Function 要删除的侦听器对象。

l        useCapture:Boolean 指出是否为捕获阶段或目标阶段和冒泡阶段注册了侦听器,默认为false。如果为捕获阶段以及目标和冒泡阶段注册了侦听器,则需要对removeEventListener()进行两次调用才能将这两个侦听器删除,一次调用将useCapture()设置为true,另一次调用将useCapture()设置为false

下面创建一个删除事件监听器的具体示例,如代码10.5所示:

代码10.5 删除事件监听器

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initapp()">

<mx:Script>

        <![CDATA[

                  import mx.controls.Alert;

                  //初始化程序

                  public function initapp():void

                  {

                           //添加事件监听器

                           but2.addEventListener(MouseEvent.CLICK,clickhandler);

                  }

                  //结果处理函数

                  public function clickhandler(e:Event):void

                  {

                           Alert.show("你选择了"+e.type+"操作");

                  }

                  public function remove():void

                  {

                           //删除事件监听器

                           but2.removeEventListener(MouseEvent.CLICK,clickhandler)

                  }

        ]]>

</mx:Script>

<mx:Button id="but2" label="确定" x="56" y="94"/>

<mx:Button id="but1" label="删除" click="remove()" x="151" y="94"/>

</mx:Application>

在上述代码中,首先创建程序初始化函数initapp(),在该函数中创建单击“确定”按钮的事件监听器。接下来创建函数remove(),该函数被“删除”按钮的click事件调用,在remove()中,使用removeEventListener()方法删除“确定”按钮的单击事件监听器。

运行程序,单击“确定”按钮,将处理按钮的click事件,返回相应的信息。单击“删除”按钮后再单击“确定”,则不返回任何内容。

 


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

关于作者