我正在实现应用程序超时功能(flex4)。我发现的是鼠标和键盘事件,我已经听过:
FlexGlobals.topLevelApplication.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity);
FlexGlobals.topLevelApplication.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity);
被任何弹出窗口的存在掩盖了。代码位于构造函数的组件中。该组件将添加到块中的主应用程序中。
如何让这些系统生成的事件不被PopUpManager显示对象停止?
谢谢!
答案 0 :(得分:3)
尝试侦听Stage而不是topLevelApplication。使用topLevelApplication
上的stage property访问舞台我认为topLevelApplication正式返回一个对象,所以你需要做这样的事情:
(FlexGlobals.topLevelApplication as Application).stage.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity);
(FlexGlobals.topLevelApplication as Application).stage.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity);
更新
请记住,在触发该组件的creationComplete事件之前,不会在topLevelApplication中设置阶段。如果要在非UI类中向舞台添加事件侦听器;你必须确保在topLevelApplication中触发creationComplete之前不会这样做。
为此,请在构造函数中的topLevelApplication的creationComplete方法中添加一个事件侦听器。
(FlexGlobals.topLevelApplication.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationCompete);
如果这是MXML UIComponent,您可以在preinitialize事件处理程序而不是构造函数中添加该代码。
然后这将是创建完整处理程序:
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 :(得分:1)
这样可以更加优雅地工作而不会打扰creationComplete。
FlexGlobals.topLevelApplication.systemManager.addEventListener(MouseEvent.MOUSE_MOVE, resetSessionTimer);
FlexGlobals.topLevelApplication.systemManager.addEventListener(KeyboardEvent.KEY_DOWN, resetSessionTimer);