Adobe Flex всплывающее окно - PullRequest
       28

Adobe Flex всплывающее окно

1 голос
/ 13 декабря 2011

Мне нужно закрыть всплывающее окно (adobe flex), немодальное окно, если я нажму на родительскую страницу всплывающего окна. Я должен сделать проверку не в фокусе, а затем сделать некоторую проверку, прежде чем закрыть всплывающее окно. Так что же я думал о том, что есть какое-либо встроенное событие проверки фокуса или нам нужно создать собственное событие для этого?

1 Ответ

1 голос
/ 13 декабря 2011

В вашем всплывающем окне вам нужно прослушать событие мыши до самого всплывающего окна и на сцене. Во всплывающем окне, если вы поймали событие «вверх», остановите его на сцене. Затем, если вы получите событие со щелчком мыши на сцене, вы узнаете, что оно было вне всплывающего окна, и можете закрыть всплывающее окно.

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" creationComplete="onCreationComplete()">
    <mx:Script>
        <![CDATA[
            import mx.managers.PopUpManager;

            private function onCreationComplete():void {
                //listen for MouseUp events on the popup, and the stage
                this.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
                stage.addEventListener(MouseEvent.MOUSE_UP, handleStageMouseUp);
            }

            private function handleMouseUp(e:MouseEvent):void {
                //catch any MouseUp events on the popup, 
                //and prevent them from getting to the stage
                e.stopPropagation(); //don't let this event get to the stage
            }

            private function handleStageMouseUp(e:MouseEvent):void {
                //if the stage fires a MouseUp event, the mouse event 
                //came from outside of the popup, so we can close it
                closePopup();
            }

            private function validate():Boolean {
                //add your validate code here
                return true;
            }

            private function closePopup():void {
                if ( validate() ) {
                    //clean up event listeners, and close popup
                    stage.removeEventListener(MouseEvent.MOUSE_UP, handleStageMouseUp);
                    PopUpManager.removePopUp(this);
                }
            }
        ]]>
    </mx:Script>
</mx:Canvas>
...