FLEX 透过单例模式,轻松关闭所有PopUpManager弹出的窗口

FLEX 通过单例模式,轻松关闭所有PopUpManager弹出的窗口

怎么关闭所有PopUpManager弹出的窗口?

 

这一个貌似很简单,缺又凭空增加麻烦和工作量的事情.

 

如果你按照下面这种模式,那么关闭所有弹出窗口又变得那么简单.

 

需求: 假设当应用程序出现错误.需要将用户弹出窗口全部关闭.恢复到初始状态.

 

 

实现思路:

 

1. 定义单例类. 用来保存所有弹出窗口的数组

 

2. 将弹出事件封装,由其去创建弹出窗口.和保存到数组对象

 

两个重要类:

 

PopUpEffect.as(弹出事件封装类)

 

 

package com.javaeye.jhaij
{
	
	
	
	import mx.managers.PopUpManager;
	
	public class PopUpEffect   
	{   
		
		public function PopUpEffect()   
		{   
		}   
		
		public static function show(parent:*,control:*,modal:Boolean=false):void   
		{   
			PopUpManager.addPopUp(control,parent,modal);   
			PopUpManager.centerPopUp(control);   
			PopupModellocator.getInstance().push(control);
			
		}   
		
		public static function hide(control:*):void   
		{   
			PopUpManager.removePopUp(control);
			PopupModellocator.getInstance().pop(control);
		}   
	}   
}  

 

PopupModellocator.as (保存数组对象的单例类,关闭全部调用)

 

package com.javaeye.jhaij
{
	import com.adobe.utils.ArrayUtil;

	[Bindable]
	public class PopupModellocator
	{
		
		private static var instance:PopupModellocator;
		//保存pop出来的窗口
		private var popupArray:Array ;
		
		
		public function DataGridModellocator()
		{
			if(instance==null){
				instance = this;
			}
		}
		
		public static function getInstance():PopupModellocator{
			if(instance==null){
				instance = new PopupModellocator();
			}
			return instance;
		}
		
		public function push(control:*):void{
			if(!popupArray){
				popupArray = new Array;
			}
			popupArray.push(control);
		}
		
		public function pop(control:*):void{
			if(popupArray){
				ArrayUtil.removeValueFromArray(popupArray,control);
			}
		}
		
		public function popAll():void{
			if(popupArray&&popupArray.length>0){
				PopUpEffect.hide(popupArray[popupArray.length-1]);
				popAll();
			}else{
				return;
			}
		}
	}
}

 

 

使用方法:

 

a. 弹出窗口创建入口: PopUpEffect.show

 

var p:PopWindow = new PopWindow;
				PopUpEffect.show(this,p);
				p.setFocus();
 

b. 弹出窗口单个关闭调用:  PopUpEffect.hide

 

close="PopUpEffect.hide(this);"

 

c. 弹出窗口全部关闭调用: popAll - 注意是PopupModellocator的方法

 

PopupModellocator.getInstance().popAll();

 

 

依赖类库:

 

as3corelib.swc

 

工程编译是用sdk3.5编译的. 你可以修改成4 因为都是as文件.完全向上兼容.

 


FLEX 透过单例模式,轻松关闭所有PopUpManager弹出的窗口

1 楼 newzhq 2011-12-23  
如果真的有这种需求,为什么不这么写,合并在一个类里面不是更方便?
    package com.javaeye.jhaij  
    {  
          
          
          
        import mx.managers.PopUpManager;  
          
        public class PopUpEffect     
        {     
            //保存pop出来的窗口  
            private static var popupArray:Array ;  
              
            public function PopUpEffect()     
            {     
            }     
              
            public static function show(parent:*,control:*,modal:Boolean=false):void     
            {     
                
                  
            }     
              
            public static function hide(control:*):void     
            {     
                
            }  
   
        }     
    }    
2 楼 jhaij 2011-12-25  
newzhq 写道
如果真的有这种需求,为什么不这么写,合并在一个类里面不是更方便?
    package com.javaeye.jhaij  
    {  
          
          
          
        import mx.managers.PopUpManager;  
          
        public class PopUpEffect     
        {     
            //保存pop出来的窗口  
            private static var popupArray:Array ;  
              
            public function PopUpEffect()     
            {     
            }     
              
            public static function show(parent:*,control:*,modal:Boolean=false):void     
            {     
                
                  
            }     
              
            public static function hide(control:*):void     
            {     
                
            }  
   
        }     
    }    



static 和 单例模式 有区别的.  本文介绍的是单例模式. 如果全都是static的话也不是不可,不过那样貌似不太好