2009-06-18 5 views
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 
} 

MyPopup:

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

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

+2

@iftrue:スタックオーバーフローに関するスタックオーバーフローに関する問題を投稿しています。タグ内の大文字と小文字の違いとハイフンは、2つを区別するのに役立ちます。 –

+0

handler()関数のコードはどのように見えますか? –

+0

ハンドラ関数は現在何もしません。 –

答えて

1

おそらくあなたは、あなたのハンドラにイベントパラメータを追加してみてください。私は、ActionScriptが提供されていないことを常に容認できるとは確信していません。例:

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

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

0

PopUpManagerのがどのように動作するかの絶対定かではないが、あなたはあなたのbuttonHandler内の文を切り替えたいかもしれません:

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

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

+0

スタックのオーバーフローが発生します。 –

1

私はあなたのコードを再現したのだが、私のために正常に動作します:(これは私のどちらかがあなたの問題を誤解してきたか、バグがどこか他のあなたのコードであることを意味している。

あなたには、いくつかのより投稿することができます任意のチャンス?問題の詳細

サム

PSここでは、私がテストするために使用されるコードです:

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> 

Popup.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> 
+0

これは何とか私のためにスタックオーバーフローでした。私は、カスタムイベントでメインアプリケーションのすべてを処理し、ポップアップを閉じて、私のstackoverflowが消えました。 –

1

サンプルでは、​​PopUpManager.removePopUp(this);をクローズイベントハンドラ、つまりに移動します。また、引数thisをポップアップに置き換える必要があります。

1

また、イベントやモデルなどを消去するためのdispose関数をポップアップで作成する必要があります。さもなければ、それはガベージコレクションされず、あなたのアプリを遅くするでしょう。

関連する問題