سؤال

ولقد تغيرت مؤخرا إلى ماتي كإطار لالمرن. ومع ذلك أنا على التوالي في عدد قليل من القضايا. أريد أن أعرف كيفية ارسال الأحداث من الطبقات المولدة عن طريق العلامة methodInvoker.

<resultHandlers>
        <MethodInvoker generator="{LoginSuccess}" method="setCurrentUser" arguments="{[resultObject]}"/>

وبعد ذلك في فئة أود أن إيفاد الحدث.

public function setCurrentUser(calUser:Object):void{
        if(calUser != null){
            Model.instance.currentUser = calUser as CalUser;
            loadOnlineCalendars(Model.instance.currentUser);
        }
    }

    public function loadOnlineCalendars(calUser:CalUser):void{
        for(var i:int = 0 ; i<calUser.calConnectors.length; i++){//logic here
            dispatchEvent(new CalConnectorEvent(calUser.calConnectors as CalConnector,CalConnectorEvent.LOAD_ONLINE_CALENDAR_EVENT,true));
        }
    }

والمشكلة هي أنني لا يمكن أن يبدو لتكون قادرة على التقاط الحدث في eventMap أو حتى في جذر التطبيق.

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

خريطة الحدث:  

            <resultHandlers>
            <MethodInvoker generator="{LoginSuccess}" method="setCurrentUser" arguments="{[resultObject]}"/>
            <ServiceResponseAnnouncer type="result"/>

            </resultHandlers>
            <faultHandlers>
            <ServiceResponseAnnouncer type="fault"/>

            </faultHandlers>
    </RemoteObjectInvoker>

                                                                                                      

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

المحلول

والطريقة التي عادة ما يتم ذلك هي حقن المرسل الخريطة الحدث في وجوه:

<MethodInvoker generator="{MyClass}" method="someMethod" arguments="{[a, b]}">
  <Properties dispatcher="{scope.dispatcher}"/>
</MethodInvoker>

العلامة Properties الداخلية تحدد خصائص على الكائن الذي يتم إنشاؤه من قبل MethodInvoker، ومضمونة الخصائص التي سيتم تحديدها قبل أن يتم استدعاء الأسلوب.

والطبقة يحتاج الواضح أن تحتوي على خاصية عامة تسمى dispatcher (أو أيا كان الاسم الذي تفضل) لهذا العمل. إيفاد الأحداث التي كنت ترغب في الاستماع لفي dispatcher.dispatchEvent(...) خريطة دعوة الحدث.

إذا سيتم استخدام كائن تم إنشاؤه من قبل MethodInvoker أكثر من مرة، لو كان مدير، مثلا، لغة شيوعا هو لإنشائه باستخدام ObjectBuilder وكتلة معالج الحدث الذي يحصل الناجمة عن FlexEvent.INITIALIZE:

<EventHandlers type="{FlexEvent.INITIALIZE}">
  <ObjectBuilder generator="{MyClass}" constructorArguments="{scope.dispatcher}"/>
</EventHandlers>

في هذا المثال يتم حقن المرسل الحدث كحجة منشئ، ولكن يمكنك استخدام علامة Properties الداخلية فقط كما هو الحال مع MethodInvoker.

نصائح أخرى

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

Application.application.dispatchEvent(new CalConnectorEvent(calUser.calConnectors as CalConnector,CalConnectorEvent.LOAD_ONLINE_CALENDAR_EVENT,true));

ولكن تحقق من المنتدى ما بعد هناك الكثير من اللحوم هناك.

ومن الطبقة في أكشن يمكنك ارسال الأحداث. لأنه إما أن توسيع الطبقة EventDispatcher أو استخدام بعض الممتلكات المرسل وتنفيذ IEventInterface. ولكن هذا ليس هو الطريق السليم لأنه لن يكون فقاعات الحدث، منذ السطح هو خاصية محددة لعرض الكائنات. يمكنك الاستماع إلى الحدث في الفئة نفسها خلال المرحلة المستهدفة. إذا كنت تريد العقد الأخرى للاستماع إلى الحدث أنه لا فقاعة. وذلك ثيو قد أجاب لديك لتمرير المرسل للإطار زميله في الصف. الآن يمكنك ارسال هذا الحدث من الفئة. وربما هذا هو أفضل وسيلة لارسال الأحداث من فئات البيانات. لمزيد من المعلومات راجع هذا الرابط HTTP: //www.developria. كوم / 2010/05 / تمرير رأس eventdispatcher-pleas.html

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