2011-03-02 28 views
3

假设我有一个应用程序和一个全局事件侦听器。那些在PopUp中被解雇的关键事件是否应该被那个听众抓住?或者,也许弹出窗口不在该层次结构中?你 这里的简化测试代码来了解我所说的:运行该应用程序后“FlexGlobals.topLevelApplication.addEventListener”无法捕捉PopUp上的键盘输入

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()"> 
<mx:Script><![CDATA[ 
private function init():void { 
      FlexGlobals.topLevelApplication.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDownHandler); 
     } 

     private function myKeyDownHandler(event:KeyboardEvent):void { 
      Alert.show("It works!"); 
     } 

     private function makeNewPopup():void { 
      var win:PopupWindow = new PopupWindow(this, new TestingForm(), true, "Popup", false); 
      win.showPopup(); 
     } 
]]></mx:Script> 
<mx:VBox> 
     <mx:TextInput/> 
     <mx:Button label="MakePopup" click="makeNewPopup()"/> 
    </mx:VBox> 
</mx:Canvas> 

好了,我们有什么..,把输入焦点到TextInput和按任意字母。警报将被解雇。现在,按下MakePopup并在TextInput中执行相同的操作..没有任何反馈。

对此有何想法?

回答

5

所有弹出窗口的父项为SystemManager。所以,请使用FlexGlobals.topLevelApplication.systemManagerstage

+0

完美!非常感谢,可惜我错过了......作品像一个魅力:) – Antenka 2011-03-02 14:40:43

+0

我的荣幸! :) – 2011-03-02 14:41:29

+0

@TimofeiDavydik FlexGlobals.topLevelApplication和addEventListener之间的区别是什么? – jason 2013-09-27 06:09:36