在Flex(Flash Builder 4)中,我通过PopUpManager.addPopUp打开一个新窗口。我有我的组件中运行的计时器代码,当窗口打开时我需要停止计时器,并在窗口关闭时再次启动计时器。Flex:如何确定PopUpManager窗口是否打开(或关闭时)?
我觉得很容易在打开窗口的函数中停止计时器,但是如何在窗口关闭时再次启动计时器?
有没有办法判断我的组件前面是否有弹出窗口,或者如果特定的弹出窗口仍然通过PopUpManager打开?
也许事件是更好的方法?
谢谢!
在Flex(Flash Builder 4)中,我通过PopUpManager.addPopUp打开一个新窗口。我有我的组件中运行的计时器代码,当窗口打开时我需要停止计时器,并在窗口关闭时再次启动计时器。Flex:如何确定PopUpManager窗口是否打开(或关闭时)?
我觉得很容易在打开窗口的函数中停止计时器,但是如何在窗口关闭时再次启动计时器?
有没有办法判断我的组件前面是否有弹出窗口,或者如果特定的弹出窗口仍然通过PopUpManager打开?
也许事件是更好的方法?
谢谢!
PopUpManager将是一个单独的类,所以你可以很容易地知道有多少弹出窗口已与他的childList
活动创造的!是要走的路。 发射/关闭期间的火灾事件。在事件处理程序中添加您的逻辑!
我喜欢这个想法,但是(承担我的学习过程),如果我有两个相同的组件并且它们都打开弹出式窗口会发生什么。从弹出窗口#2抛出事件最终将发送到组件1和2? (那么组件如何知道哪些事件对他们有意义?或者我错了?) –
您可以使用以下代码来检查打开的弹出窗口是否正在关闭。 如果它关闭,您可以停止计时器。
//set the flag to find your popup window is exist or not.
private var isPopupExist:Boolean = false;
private function closePopUpWindow():void
{
var systemManager:SystemManager = FlexGlobals.topLevelApplication.systemManager;
//Returns a list of all children.
var childList:IChildList = systemManager.rawChildren;
for(var i:int=childList.numChildren-1;i>=0;i--)
{
var childObject:* = childList.getChildAt(i);
//If child object is Uicomponent.
if (childObject is UIComponent)
{
var uiComponent:UIComponent = childObject as UIComponent;
//If uicomponent is popup and class name is equal to **your popup component name** here i am using "ChatComp".
if (uiComponent.isPopUp && uiComponent.className == "ChatComp")
{
isPopupExist = true;
}
}
}
}
在定时器
,
private function checkPopUpExistance():void
{
call closePopUpWindow() function for every 1 sec or any seconds(your wish) to check whether popup is exist or not.
if(isPopupExist)
{
here you stop the timer.
}
}
现在你可以开始计时,当你打开弹出窗口。
你回答了你自己的问题不是吗? ;)事件FTW – RIAstar
我可能没有理解你的问题,但看起来你需要知道弹出窗口是否关闭。如果是这样,那么我需要知道窗口是否关闭。我的问题是,你怎么关闭你的窗户。通常的方法是添加一个按钮并在该按钮上注册一个点击处理程序,这将调用弹出窗口管理器关闭窗口。你没有这样做吗? –
是的,我正在使用PopUpManager.removePopUp(this); –