2012-01-31 48 views
0

我想弄清楚如何在我的Air应用程序中,在辅助窗口而不是主应用程序窗口中打开弹出式窗口。Flex - 如何获取自定义网格列过滤器编辑器的父级并打开弹出式窗口?

我正在使用ReusableFX组件,其中包括具有过滤和其他功能的自定义DataGrid。当您单击网格中列的顶部时,过滤功能将通过PopUpManager显示弹出窗口。

PopUpManager.addPopUp(this, FlexGlobals.topLevelApplication as DisplayObject); 

问题是弹出窗口在主应用程序中打开 - 我假设是因为'topLevelApplication'引用。

所以,我需要一种方法来在当前Air's s:Window中打开这个窗口。

我假设我需要一种方式来走:this.parent.parent或this.owner.owner - 虽然我已经尝试过,它似乎并没有工作(它说空引用)。

或者,有没有办法获得当前最顶级的窗口/组件(不是主应用程序/窗口)?

更新: 我决定为该组件创建一个新项目,并添加到Air库中。现在我可以访问“NativeApplication.nativeApplication.activeWindow”调用。这给了我正确的空气窗口。但是,它似乎没有工作:

PopUpManager.addPopUp(this, NativeApplication.nativeApplication.activeWindow as DisplayObject); 

我的弹出菜单不显示。我假设因为“activeWindow”实际上不是DisplayObject? (让我怎么得到的DisplayObject如果是这样的话?)

更新: 难道说我的this adobe bug?found here originally

回答

0

好一个受害者,我想出了一些变化,似乎工作,尽管可能有更简洁的方法来做到这一点 - 我只是无法想出一种方式来获得除了这种方式以外的当前空气应用程序窗口的引用(顺便说一下,这是使用ReuableFX自定义柔性组件):

首先,在我的自定义DataGridColumn组件中,我添加了一个公共属性

public var pApp:Object; 

接下来,我修改了DropDownFilterHeaderRenderer(扩展HBox,实现IListItemRenderer),showFilterDropDown方法,并在它调用dropDown.startEdit(column)之前。补充说:

column.pApp = parentApplication; 

最后,我改性DropDownFilterEditor(其延伸FilterEditorBase),该方法startEdit中(柱:MDataGridColumn)(在前PopUpManager将被调用FlexGlobals.topLevelApplication,如打开时,这是不正确的窗口:窗口in Air native application:

var editorInstance:Object = _editor.parent; 
var columnInstance:Object = editorInstance.column; 
var parAppInstance:Object = columnInstance.pApp; 
PopUpManager.addPopUp(this, parAppInstance as DisplayObject); 
相关问题