2011-02-28 155 views
0

这里是场景......我有一个应用程序有一个“打开”按钮。当你点击打开按钮时,一个TitleWindow弹出(通过PopUpManager)一个对话框,允许你选择一条记录。在该窗口中,您可以在选择记录后点击“确定”,或者取消应该关闭窗口的对话框。谁应该删除弹出窗口,调用应用程序或弹出窗口?

处理这个问题的最佳方法是什么?知道我需要将记录编号返回给主应用程序?现在我有主应用程序打开自定义TitleWindow。在TitleWindow中,当用户点击“确定”并选择一条记录时,我会触发一个事件。这就是主应用程序监听recordId的方式。我想知道是,如果我可以做这样的事情:

private function RecordSelected():void 
{ 
    this.selectedRecord = someControl.selectedIndex; 

    this.dispatchEvent(new Event("RecordSelected")); 

    PopUpManager.removePopup(this); 
} 

请问TitleWindow中的情况下保持活跃,直至活动结束后由主应用程序处理,或者可以将其主要的应用程序之前完全被删除处理事件(因此以空引用异常结束)?

或者,是它更好地关闭窗口,在事件处理程序,如下所示:

private function titleWindow_RecordSelected(event:Event) 
{ 
    var openDialog:CustomTitleWindow = CustomTitleWindow(e.currentTarget); 

    this._selectedRecord = openDialog.selectedRecord; 

    PopUpManager.removePopup(openDialog); 
} 

我也想知道,如果在事件出来发送的选择是做这也是最好的办法。任何洞察力将不胜感激。提前致谢。

回答

1

什么是处理这个问题的最好办法, 知道我需要记录 号返回主应用程序?

最好总是主观的,但我通常会处理关闭窗口组件中的窗口;然后将具有适当数据的事件(在此情况下为记录编号)发送回应用程序。这听起来像你的90%。而不是调度一个事件Event,用你的recordID创建一个自定义Event类。那么当你需要使用记录ID时,弹出窗口是否仍然在内存中并不重要。

+0

这听起来像是一个更好的方式来处理它。为了好奇,如果我在关闭之前触发它,它会以连续的方式运行(所以事件在关闭窗口之前必须完全处理)? – Ocelot20 2011-02-28 21:06:37

+0

我很确定事件侦听器是以“串行”方式运行的。因此,创建弹出窗口的组件中的事件侦听器将在PopUpManager remove类之前执行。 [我并不总是对的,所以你可能想整理一个快速样本来验证] – JeffryHouser 2011-02-28 23:51:34