Flex - 如何获取自定义网格列过滤器编辑器的父级并打开弹出窗口?

时间:2012-01-31 11:42:57

标签: flex air flash-builder popupwindow

我想弄清楚如何在我的Air应用程序中打开一个弹出窗口,在辅助窗口中,而不是主应用程序窗口。

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

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

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

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

我假设我需要一种方法走路:this.parent.parent或this.owner.owner - 虽然我已经尝试过但它似乎没有用(它说空引用)。

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

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

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

我的弹出窗口没有出现。我假设因为“activeWindow”实际上不是DisplayObject? (那么如果是这种情况,我如何获得DisplayObject?)

更新:  可能是我是this adobe bug?found here originally

的受害者

1 个答案:

答案 0 :(得分:0)

好吧,我想出了一些似乎有用的改动,虽然可能有一个更清洁的方法来做到这一点 - 我只是无法想办法获得对当前空中应用程序窗口的引用,除了这种方式(顺便说一下,这是使用ReuableFX自定义flex组件):

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

public var pApp:Object;

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

column.pApp = parentApplication;

最后,我修改了DropDownFilterEditor(它扩展了FilterEditorBase),方法startEdit(column:MDataGridColumn)(前一个PopUpManager调用的是FlexGlobals.topLevelApplication,它在打开时不是正确的窗口:Air原生应用程序中的Window:< / p>

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