题
我跑进一个problem.I'm使用Flex做一个地理信息系统。
有一个在我的应用程序映射,当我点击地图上的一个图标,窗口A弹出,当我点击内部窗口A纽带,窗口B弹出,但在这里我的问题出来了,当我关闭窗口B,并点击链接另一时间内窗口A,窗口B的两个弹出...
在我的窗口A,我
...
var windowBEvt:WindowBEvent = new WindowBEvent();
CairngormEventDispatcher.getInstance().dispatchEvent(windowBEvt);
...
<control:WindowBControl id='control1'>
在WindowBControl,我
addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);
在WindowBCommand,我
public function execute(event:CairngormEvent):void
{
...
var windowB:WindowB = new WindowB();
PopUpManager.addPopUp(windowB);
...
}
谁能给我个忙吗?
许多谢谢!
最佳,硕
解决方案
是否从WindowBControl继承FrontController?如果是的话,你可能将其实例化不止一次事故更多。这样:
<control:WindowBControl id='control1'>
时,将创建该前端控制器的一个实例。既然你已经把此行的代码窗口A,你会在每次创建窗口A的新实例时创建该控制器的新实例。然后这将导致在被调用一次,每次您的事件触发所述控制器的每一个实例的命令。
您应该只实例化前端控制器,你是积极的,他们只会被实例化一次。主要应用的mxml是一个很好的地方。
其他提示
第一
// Shouldn't this be in a FrontController class?
addCommand(WindowBControl.EVENT_POPUPWindowB,WindowBCommand);
我认为你必须以某种方式调用PopupManager.removePopup因为Flex 3的ActionScript参考状态:
弹出一个顶层窗口。这是很好的调用removePopUp()来删除使用addPopUp()方法创建的弹出窗口。如果该类实现了IFocusManagerContainer,窗口将具有其自己的FocusManager使得,如果用户使用TAB键控件之间导航,只有在窗口中的控制将被访问
我找到另一种解决方案。
在窗口A的收盘方法,我写
private function onClose():void
{
PopUpManager.removePopUp(this);
if(CairngormEventDispatcher.getInstance().hasEventListener(WindowBControl.EVENT_POPUPWindowB))
{
control1.removeCommand(WindowBControl.EVENT_POPUPWindowB);
}
}
不隶属于 StackOverflow