2009-06-18 109 views
2

我莫名其妙Flex 3中創建一個堆棧溢出...我試圖讓數據從一個模態對話窗口的這樣:Flex彈出窗口:堆棧溢出?

主要應用:

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:你要發送一個關於堆棧溢出堆棧溢出問題。大寫差異和標籤中的連字符有助於區分兩者。 – 2009-06-18 19:46:16

+0

handler()函數中的代碼是什麼樣的? – 2009-06-18 20:14:00

+0

處理函數現在不做任何事情。 – 2009-06-19 17:16:33

回答

1

或許你可以嘗試添加一個事件參數的處理程序。我不太確定ActionScript是否可以始終容忍沒有提供的內容。例如:

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

我也是第二次在解僱Justin之前解僱彈出窗口之前調用處理程序的做法。

0

上PopUpManager將如何表現不是絕對肯定的,但你可能想切換在buttonHandler語句:

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

彈出窗口將會熬夜,而你的事件代碼運行,但它應該照顧在激發試圖從中獲取數據的代碼之前,彈出對象被丟棄的情況。

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> 
1

在你的樣品,將PopUpManager.removePopUp(this);到接近事件處理程序,即。您還需要用彈出式菜單替換參數this

1

您還需要創建一個dispose功能清洗事件,型號等...在你的眼前。否則,它不會被垃圾收集,並減慢你的應用程序。