FLEX 透过单例模式,轻松关闭所有PopUpManager弹出的窗口
FLEX 通过单例模式,轻松关闭所有PopUpManager弹出的窗口
static 和 单例模式 有区别的. 本文介绍的是单例模式. 如果全都是static的话也不是不可,不过那样貌似不太好
怎么关闭所有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文件.完全向上兼容.
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的话也不是不可,不过那样貌似不太好