簡體   English   中英

Flex彈出窗口:堆棧溢出?

[英]Flex Popup Window: Stack Overflow?

我以某種方式在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 ) );
}

如果這樣做不合適,以允許我使用和檢索對象上數據的方式處理彈出窗口關閉的正確方法是什么?

我已經重新創建了您的代碼,它對我來說很好:(這意味着我誤解了您的問題,或者該錯誤在您代碼的其他地方。

您有機會發布有關該問題的更多詳細信息嗎?

山姆

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>

也許您可以嘗試將事件參數添加到處理程序中。 我不太確定ActionScript是否總能容忍未提供的內容。 例:

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

我還贊同賈斯汀提到的在取消彈出窗口之前調用處理程序的做法。

在您的示例中,移動PopUpManager.removePopUp(this); 到關閉事件處理程序,即popupClose(e:Event) 您還需要將參數this替換為popup。

您還需要創建一個dispose函數以清除彈出窗口中的事件,模型等。 否則將不會被垃圾收集,並降低您的應用程序速度。

對於PopUpManager的行為尚不確定,但您可能希望在buttonHandler中切換語句:

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

當您的事件代碼運行時,彈出窗口將保留下來,但是在啟動試圖從中獲取數據的代碼之前,它應該處理彈出對象被處置的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM