문제

어떻게든 Flex 3에서 스택 오버플로를 생성하고 있습니다...다음과 같이 모달 대화 상자 창에서 데이터를 가져오려고 합니다.

주요 응용 프로그램:

var myPopup:MyPopup;

function buttonClick( event:MouseEvent ):void
{
myPopup = MyPopup( PopUpManager.createPopUp( this, MyPopUp, true ) );
myPopup.addEventListener( CloseEvent.CLOSE, handler, false, 0, true );
}

function handler():void
{
//get data
}

마이팝업:

function buttonHandler( MouseEvent:event ):void
{
PopUpManager.remove( this );
this.dispatchEvent( new CloseEvent( CloseEvent.CLOSE ) );
}

이것이 부적절한 경우 개체의 데이터를 사용하고 검색할 수 있는 방식으로 팝업 닫기를 처리하는 올바른 방법은 무엇입니까?

도움이 되었습니까?

해결책

아마도 핸들러에 이벤트 매개변수를 추가해 볼 수도 있습니다.ActionScript가 항상 제공되지 않는 것을 허용할 수 있는지 잘 모르겠습니다.예:

function handler(event:CloseEvent):void {
    // Handle away
}

또한 Justin이 언급한 것처럼 팝업을 닫기 전에 핸들러를 호출하는 방법도 있습니다.

다른 팁

나는 당신의 코드를 재현했고 그것은 나에게 잘 작동합니다 :( 이것은 당신의 문제를 오해했거나 버그가 코드의 다른 곳에 있다는 것을 의미합니다.

문제에 대한 자세한 내용을 게시 할 수 있습니까?

추신 : 여기서 테스트했던 코드는 다음과 같습니다.

application.mxml :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

    <mx:Button x="10" y="10" label="Button" click="buttonClick(event)" id="popupButton"/>

    <mx:Script>
        <![CDATA[
            import mx.core.IFlexDisplayObject;
            import mx.managers.PopUpManager;

            private var popup:Popup;

            private function buttonClick(e:MouseEvent):void {
                popup = PopUpManager.createPopUp(this, Popup, true) as Popup;
                popup.addEventListener(Event.CLOSE, popupClose, false, 0, true);
            }

            private function popupClose(e:Event):void {
                trace(popup);
                popupButton.label = "Closed";
            }
        ]]>
    </mx:Script>

</mx:Application>

팝업 .mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
    <mx:Button x="167" y="123" label="Close me" click="buttonClick(event)"/>

    <mx:Script>
        <![CDATA[
            import mx.managers.PopUpManager;

            private function buttonClick(e:MouseEvent):void {
                dispatchEvent(new Event(Event.CLOSE));
                PopUpManager.removePopUp(this);
            }
        ]]>
    </mx:Script>

</mx:Canvas>

또한 팝업에서 이벤트, 모델 등을 청소하기 위해 처분 기능을 만들어야합니다. 그렇지 않으면 쓰레기가 수집되지 않고 앱을 늦추지 않습니다.

샘플에서 움직입니다 PopUpManager.removePopUp(this); 가까운 이벤트 핸들러에게, 즉 popupClose(e:Event). 또한 인수를 대체해야합니다 this 팝업으로.

PopupManager가 어떻게 행동하는지에 대해서는 확실하지 않지만 ButtonHandler의 진술을 전환하고 싶을 수도 있습니다.

function buttonHandler(MouseEvent:event):void
{
    this.dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
    PopUpManager.remove(this);
}

이벤트 코드가 실행되는 동안 팝업이 계속 유지되지만 데이터를 얻으려는 코드를 발사하기 전에 팝업 객체가 배치되는 상황을 관리해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top