2

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 ) );
}

これが不適切な場合、オブジェクトのデータを使用および取得できるようにポップアップを閉じる正しい方法は何ですか?

4

5 に答える 5

1

また、ポップアップ内のイベントやモデルなどをクリーンアップするための破棄関数を作成する必要があります。そうしないと、ガベージコレクションが行われず、アプリの速度が低下します。

于 2009-11-27T01:04:55.937 に答える
1

私はあなたのコードを再作成しましたが、それは私にとってはうまくいきます:(これは、私があなたの問題を誤解しているか、バグがあなたのコードのどこかにあることを意味します.

問題についてさらに詳細を投稿できる可能性はありますか?

サム

PSこれが私がテストに使用したコードです:

アプリケーション.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>
于 2009-06-20T11:24:36.457 に答える
1

おそらく、イベント パラメーターをハンドラーに追加してみてください。ActionScript が提供されていないことを常に許容できるかどうかはわかりません。例:

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

また、ジャスティンが述べたように、ポップアップを閉じる前にハンドラーを呼び出すという慣行にも賛成です。

于 2009-06-21T18:49:09.560 に答える
1

サンプルでPopUpManager.removePopUp(this);は、​​close イベント ハンドラ、つまりpopupClose(e:Event). thisまた、引数を popupに置き換える必要があります。

于 2009-09-18T22:00:30.750 に答える
0

PopUpManager がどのように動作するかは完全にはわかりませんが、buttonHandler 内のステートメントを切り替えたい場合があります。

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

イベント コードが実行されている間、ポップアップは表示されたままになりますが、ポップアップ オブジェクトからデータを取得しようとするコードを起動する前に、ポップアップ オブジェクトが破棄される状況を処理する必要があります。

于 2009-06-18T19:19:59.230 に答える