2011-09-06 85 views
0

在Flex(Flash Builder 4)中,我通过PopUpManager.addPopUp打开一个新窗口。我有我的组件中运行的计时器代码,当窗口打开时我需要停止计时器,并在窗口关闭时再次启动计时器。Flex:如何确定PopUpManager窗口是否打开(或关闭时)?

我觉得很容易在打开窗口的函数中停止计时器,但是如何在窗口关闭时再次启动计时器?

有没有办法判断我的组件前面是否有弹出窗口,或者如果特定的弹出窗口仍然通过PopUpManager打开?

也许事件是更好的方法?

谢谢!

+0

你回答了你自己的问题不是吗? ;)事件FTW – RIAstar

+0

我可能没有理解你的问题,但看起来你需要知道弹出窗口是否关闭。如果是这样,那么我需要知道窗口是否关闭。我的问题是,你怎么关闭你的窗户。通常的方法是添加一个按钮并在该按钮上注册一个点击处理程序,这将调用弹出窗口管理器关闭窗口。你没有这样做吗? –

+0

是的,我正在使用PopUpManager.removePopUp(this); –

回答

0

活动创造的!是要走的路。 发射/关闭期间的火灾事件。在事件处理程序中添加您的逻辑!

+0

我喜欢这个想法,但是(承担我的学习过程),如果我有两个相同的组件并且它们都打开弹出式窗口会发生什么。从弹出窗口#2抛出事件最终将发送到组件1和2? (那么组件如何知道哪些事件对他们有意义?或者我错了?) –

0

您可以使用以下代码来检查打开的弹出窗口是否正在关闭。 如果它关闭,您可以停止计时器。

//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. 
    } 
} 

现在你可以开始计时,当你打开弹出窗口。

相关问题