Adobe Flex PopUpManager - 打开了TitleWindow的多个实例

时间:2011-09-27 18:20:54

标签: flex popup adobe behavior

设置:我的Flex应用程序是由多个“子应用程序”组成的应用程序。基本上,主应用程序区域是ApplicationControlBar,其中包含每个子应用程序的按钮。该区域的其余部分是显示子应用程序的画布。一次只能看到一个子应用程序。在子应用程序之间切换时,我们执行canvas.removeAllChildren(),然后执行canvas.addChild(subAppSwitchedTo)。它本质上是一个ViewStack的手动实现(其优缺点不是这个的主题,所以不要对此进行评论)。

问题:在我的一个子应用程序中(假设是子应用程序“A”),我有一个搜索功能,其中结果显示在一个弹出的TitleWindow中。工作流程就像输入搜索条件,单击搜索按钮,TitleWindow弹出结果(多选数据网格),选择所需的结果,单击确定,弹出消失(PopUpManager.removePopUp),然后继续工作。一切正常。问题是如果我切换到另一个子应用程序(例如“B” - 其中A得到 removeAllChildren ()'并且B被添加),然后将切换回到A并再次搜索,当结果TitleWindow弹出打开时,会有 TWO 堆叠在一起。如果我继续导航并返回A,每次搜索时,弹出窗口的“堆栈”中都会有一个额外的弹出窗口(每次A获取 addChild ()'d)。

还有其他人经历过这个吗?我不知道该怎么办,它在我的应用程序中造成严重的可用性错误。这对任何人都响了吗?这就像我以某种方式需要刷新PopUpManager或其他东西(即使我正确地调用 removePopUp ()来删除TitleWindow)。请帮忙!


修改

Flex SDK = 4.5.1

// Subapp "A"
if (!certificateSearchTitleWindow)
{
  certificateSearchTitleWindow = new CertificateSearchTitleWindow;
  certificateSearchTitleWindow.addEventListener("searchAccept", searchOKPopupHandler);
  certificateSearchTitleWindow.addEventListener("searchCancel", searchClosePopupHandler);
}
PopUpManager.addPopUp(certificateSearchTitleWindow, this, true);

2 个答案:

答案 0 :(得分:1)

我的猜测是,当您删除其父级(PopUpManager.addPopup()方法中的 this )时,弹出窗口将从主显示列表中删除,但不会从其父显示列表中删除。为什么不在子应用程序中监听Event.REMOVED事件,然后删除弹出窗口?那将是:

private var pp:CertificateSearchTitleWindow;

private function onCreationComplete():void
{
    addEventListener(Event.REMOVED, onRemovede);
}

private function addPopUp():void
{
    if (!pp) {
        pp = new CertificateSearchTitleWindow();
        PopUpManager.addPopUp(pp, this, true);
    }
}

private function onRemoved(event:Event):void
{
    if (pp) {
        PopupManager.removePopUp(pp);
        pp = null;
    }
}

答案 1 :(得分:1)

感谢那些提出建议的人。事实证明我一遍又一遍地重新注册了一个eventListener。

我使用singleton充当子应用程序之间的“共享内存”。我在子应用A的 creationComplete 回调中设置singleton.addEventListener(someType, listener)。因此,每次我导航回A时, creationComplete 都在运行并重新添加此侦听器。搜索之后,多次调用侦听器方法(打开弹出窗口),即添加事件的次数。

xref:http://forums.adobe.com/message/3941163