hasEventListener()与willTrigger()区别

 

hasEventListener()方法:

检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。

willTrigger()方法:

检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器.

hasEventListener() 与 willTrigger()的区别是:hasEventListener() 只检查它所属的对象,而 willTrigger() 检查整个事件流以查找由type参数指定的事件。

为了判断事件流的上游是否能处理某个事件,应该借助“willTrigger()”方法进行检查。当事件流的节点对象调用“willTrigger()”方法后,不仅检查调用该方法的对象,同时还会检查该对象的上游节点。如果发现相应的事件侦听器,则返回true。“willTrigger()”方法虽然简单,但是不能提供确切的事件侦听器数目。

 

如果在代码中遍历事件流对象,并配合“hasEventListener()”方法,能够获得某个事件的侦听器数量。

 

<?xml version="1.0" encoding="utf-8"?>   
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"  
applicationComplete="init();">   
       
    <mx:Script>   
        <!--[CDATA[         
            private function init():void {     
                this.stage.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);     
//              btn1.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);   
       
                trace("hasEventListener: " + btn1.hasEventListener(MouseEvent.MOUSE_OUT));   
                trace("willTrigger: " + btn1.willTrigger(MouseEvent.MOUSE_OUT));   
            }   
               
            private function onMouseOut(event:MouseEvent):void {   
                //   
            }   
        ]]-->   
    </mx:Script>   
    <mx:Button x="183" y="242" label="Button" width="180" height="100" id="btn1"/>   
</mx:Application> 

 

 

输出:

 

hasEventListener: false

willTrigger: true

你可能感兴趣的:(as3,WillTrigger)