本页面由 Flash 保存计划 从 Internet Archive 存档还原 · 快照 2011-04-22 · 原址 http://www2.flash8.net/teach/8437.htm ← Flash 保存计划

Flex在匿名方法移除自身的侦听方法

作者:kevinLee   类型:原创   来源:csdn.net

  

Question:

有时我们为了减少不必要的参数传递,使用匿名方法。但假若匿名方法是个事件的侦听者时,在侦听方法结束时,为了节省内存,我们得当添加的侦听方法移除掉。

问题就产生了,因为是匿名方法,在removeEventListener(Event.Type, Funtion) 中前两个方法是必须的,第二个方法是填什么就成了问题。

Solution:

在自定义的PopupMange类中,处理弹出时,添加了Zoom效果,使窗口的出现更为自然些。

private static var zoomShow:Zoom = new Zoom();   
        private static var zoomHide:Zoom = new Zoom();   
public static function popShowEffect(target:IFlexDisplayObject):void  
        {   
            zoomShow.zoomHeightFrom = 0;   
            zoomShow.zoomHeightTo = 1;   
            zoomShow.zoomWidthFrom = 0;   
            zoomShow.zoomWidthTo = 1;   
            zoomShow.play([target]);   
        }   
           
        public static function popHideEffect(target:IFlexDisplayObject):void  
        {   
            zoomHide.zoomHeightFrom = 1;   
            zoomHide.zoomHeightTo = 0;   
            zoomHide.zoomWidthFrom = 1;   
            zoomHide.zoomWidthTo = 0;   
            zoomHide.play([target]);   
        }   
       public static function createPopUp(parent:DisplayObject, className:Class, modal:Boolean = false, childList:String = null):IFlexDisplayObject   
        {   
    popShowEffect(popUp);   
            return mx.managers.PopUpManager.createPopUp(parent, className, modal, childList);   
        }  

但在removePopup()时,我们同样使用效果,但效果结束时,才是真正的移除弹出的窗口。这时,需要给Zoom对象添加EffectEvent.EFFECT_END事件侦听者,同时当侦听器执行完,移除该侦听者。

解决办法如下:

public static function removePopUp(popUp:IFlexDisplayObject):void  
        {   
            popHideEffect(popUp);              
            zoomHide.addEventListener(EffectEvent.EFFECT_END,function(evt:EffectEvent):void  
            {   
                if (popUp!= null)   
                {   
                    popUp.removeEventListener(MoveEvent.MOVE, doMove);   
                }      
                mx.managers.PopUpManager.removePopUp(popUp);   
                evt.target.removeEventListener(EffectEvent.EFFECT_END, arguments.callee);   
            });   
        }  
在线投稿和咨询,联系闪吧编辑    责任编辑:silvia    时间:2010年10月15日