«FlexGlobals.topLevelApplication.addEventListener» не может перехватить ввод с клавиатуры в PopUp - PullRequest
3 голосов
/ 02 марта 2011

Предположим, у меня есть приложение и прослушиватель глобальных событий. Должны ли ключевые события, которые запускаются в 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. Никаких отзывов от него нет.

Есть мысли по этому поводу?

1 Ответ

5 голосов
/ 02 марта 2011

Родитель всех всплывающих окон - SystemManager.Итак, используйте FlexGlobals.topLevelApplication.systemManager или stage.

...