【问题标题】:Flex - How to get the parent of a custom grid column filter editor and open a pop up window?Flex - 如何获取自定义网格列过滤器编辑器的父级并打开弹出窗口?
【发布时间】:2012-02-23 03:16:42
【问题描述】:

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

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

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

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

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

我假设我需要一种方法来向上走:this.parent.parent 或 this.owner.owner - 虽然我已经尝试过,但它似乎不起作用(它说 null 引用)。

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

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

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

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

更新: 难道我是this adobe bug?(found here originally)的受害者

【问题讨论】:

    标签: apache-flex air flash-builder popupwindow


    【解决方案1】:

    好吧,我想出了一些似乎可行的更改,尽管可能有一种更清洁的方法来做到这一点 - 我只是无法找到一种方法来获取对当前空气应用程序窗口的引用,除非这种方式(顺便说一下,这是使用 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原生应用程序中打开as:Window时不是正确的窗口:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多