2012-01-31 30 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); 
相關問題