在flex开发的时候,弹出窗口有时候可由父窗口或当前窗口关闭,如果想点其它地方的时候,也能关闭窗口,那么可以在窗口打开时,用单例的某个属性(例:widgetObj)来保存当前窗口,当需要在其它地方关闭窗口的时候,调用这个单例,用PopUpManager.removePopUp(GlobeConfig.getInstance().widgetObj as IFlexDisplayObject);,并将属性widgetObj设置为null即可。
先定义一个单例,保存当前窗口类GlobeConfig.as/GlobeConfig.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
private static var instance:GlobeConfig;
//用来保存当前窗口
public var widgetObj:Object =null;
public static function getInstance():GlobeConfig{
if(null == instance){
instance = new GlobeConfig();
instance.init();
}
return instance;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
</s:Group>
在弹出窗口的时候,将窗口赋给widgetObj。
var w1:VideoOpenWindow1;
w1 = new VideoOpenWindow1();
//将前当窗口赋给widgetObj !!!
GlobeConfig.getInstance().widgetObj=w1;
w1.videoIDArray = videoIDArray;
w1.parentObj = this;
PopUpManager.addPopUp(w1,this,false);
PopUpManager.centerPopUp(w1);
w1.x = Capabilities.screenResolutionX/3;
w1.y = Capabilities.screenResolutionY/10;
关闭窗口的时候用:
protected function closeWindow():void{
//map.infoWindow.hide(); //如果用到地图的话
if(GlobeConfig.getInstance().widgetObj!=null){
PopUpManager.removePopUp(GlobeConfig.getInstance().widgetObj as IFlexDisplayObject);
GlobeConfig.getInstance().widgetObj=null;
}
}
如果不想每个mxml中写一个closeWindow()方法,可以新建一个文件ClosePopWindow.as,以后用到它的时候,这样调用:
new com.flexdms.pojo.sys.ClosePopWindow().closePopWindow();
ClosePopWindow.as
package com.flexdms.pojo.sys{
import com.flexdms.manage.GlobeConfig;
import mx.core.IFlexDisplayObject;
import mx.managers.PopUpManager;
[Bindable]
public class ClosePopWindow
{
public function ClosePopWindow()
{
}
public function closePopWindow():void {
if(GlobeConfig.getInstance().widgetObj!=null){
PopUpManager.removePopUp(GlobeConfig.getInstance().widgetObj as IFlexDisplayObject);
GlobeConfig.getInstance().widgetObj=null;
}
}
}
}
转载请注明:http://blog.youkuaiyun.com/paincupid/article/details/44645425