Flex - Как получить родительский редактор настраиваемого фильтра столбцов сетки и открыть всплывающее окно? - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь выяснить, как открыть всплывающее окно в моем приложении 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". Это дает мне правильное воздушное окно. Тем не менее, это не похоже на работу:

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

Мое всплывающее окно не появляется. Я предполагаю, потому что "activeWindow" на самом деле не является DisplayObject? (так как я могу получить DisplayObject, если это так?)

Обновление: Может быть, я являюсь жертвой этой ошибки Adobe? ( найден здесь изначально )

1 Ответ

0 голосов
/ 01 февраля 2012

Что ж, я предложил некоторые изменения, которые, кажется, работают, хотя, возможно, есть более чистый способ сделать это - я просто не смог найти способ получить ссылку на текущее окно приложения, кроме этого.(кстати, это использует пользовательский гибкий компонент ReuableFX):

Во-первых, в свой пользовательский компонент DataGridColumn я добавил открытое свойство

public var pApp:Object;

Затем я изменил DropDownFilterHeaderRenderer (расширяетHBox, реализует метод IListItemRenderer), showFilterDropDown и непосредственно перед вызовом dropDown.startEdit (column);, добавлено:

column.pApp = parentApplication;

Наконец, я изменил DropDownFilterEditor (который расширяет FilterEditorBase), метод startEdit (column: MDataGridColumn) (предыдущий PopUpManager вызывал FlexGlobals.topLevelApplication, который не является правильным окном при открытии как: Окно в приложении Air:

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