سؤال

أقوم بطريقة ما بإنشاء تجاوز سعة المكدس في 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 ) );
}

إذا كان هذا غير مناسب، فما هي الطريقة الصحيحة للتعامل مع إغلاق النافذة المنبثقة بطريقة تسمح لي باستخدام البيانات الموجودة على الكائن واستردادها؟

هل كانت مفيدة؟

المحلول

وربما قد تتمكن من محاولة إضافة المعلمة الحدث إلى معالج الخاص بك. أنا لست متأكدا من ذلك أن أكشن يمكن أن يتسامح دائما أن لا يتم توفيرها. مثال:

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

وأنا أيضا ثاني ممارسة استدعاء معالج قبل اقالة المنبثقة كما ذكر جوستين.

نصائح أخرى

ولقد صوغه التعليمات البرمجية وأنه يعمل بشكل جيد بالنسبة لي :( وهذا يعني أنه إما لقد أساء فهم المشكلة أو الخلل هو في مكان آخر في التعليمات البرمجية.

وأي فرصة أن تتمكن من المشاركة بعض مزيد من التفاصيل حول المشكلة؟

وسام

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

تحتاج أيضًا إلى إنشاء وظيفة التخلص لتنظيف الحدث والنماذج وما إلى ذلك ...في المنبثقة الخاصة بك.وإلا فلن يتم جمع القمامة وإبطاء تطبيقك.

في عينتك، نقل PopUpManager.removePopUp(this); إلى معالج الأحداث وثيق، أي popupClose(e:Event). سوف تحتاج أيضا إلى استبدال this مشادة مع المنبثقة.

وليس من المؤكد تماما على الطريقة التي يتصرف بها PopUpManager، ولكن قد ترغب في تبديل البيانات في buttonHandler الخاص بك:

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

ووالمنبثقة سوف البقاء حتى أثناء تشغيل رمز الحدث الخاص بك، ولكن يجب أن تأخذ الرعاية من الوضع حيث يتم التخلص الكائن المنبثقة الخاص بك قبل اطلاق النار على التعليمات البرمجية التي يحاول الحصول على البيانات منه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top