Как получить события мыши и клавиатуры, замаскированные PopUpManager - PullRequest
1 голос
/ 29 июля 2011

Я реализую функцию тайм-аута приложения (flex4). То, что я нахожу, - это события мыши и клавиатуры, которые я прослушал с помощью:

FlexGlobals.topLevelApplication.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity);
FlexGlobals.topLevelApplication.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity);

маскируются наличием любых всплывающих окон. Код находится в компоненте, в конструкторе. Компонент добавляется в основное приложение в блоке.

Как я могу заставить эти сгенерированные системой события не останавливаться экранными объектами PopUpManager?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Попробуйте прослушать Stage вместо приложения topLevel. получить доступ к сцене с помощью свойства stage в приложении topLevelApplication

Я думаю, что topLevelApplication формально возвращает объект, поэтому вам нужно сделать что-то вроде этого:

(FlexGlobals.topLevelApplication as Application).stage.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity);
(FlexGlobals.topLevelApplication as Application).stage.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity);

Обновление:

Имейте в виду, что этап не устанавливается в topLevelApplication до тех пор, пока не будет запущено событие creationComplete этого компонента. Если вы добавляете прослушиватели событий на сцену не в классе UI; Вы должны убедиться, что это не будет сделано до тех пор, пока creationComplete не сработает в приложении topLevelApplication.

Для этого добавьте прослушиватель событий в метод creationComplete topLevelApplication в конструкторе.

(FlexGlobals.topLevelApplication.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationCompete);

Если это MXML UIComponent, вы можете добавить этот код в обработчик события предварительной инициализации вместо конструктора.

Тогда это будет обработчик завершения создания:

public function onCreationComplete(event:FlexEvent):void{
    (FlexGlobals.topLevelApplication as Application).stage.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity);
    (FlexGlobals.topLevelApplication as Application).stage.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity);
}
1 голос
/ 12 декабря 2012

Это работает более элегантно, не беспокоясь creationComplete.

FlexGlobals.topLevelApplication.systemManager.addEventListener(MouseEvent.MOUSE_MOVE, resetSessionTimer);
FlexGlobals.topLevelApplication.systemManager.addEventListener(KeyboardEvent.KEY_DOWN, resetSessionTimer);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...