2009-06-18 74 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功能清洗事件,型号等...在你的眼前。否则,它不会被垃圾收集,并减慢你的应用程序。