التفاعل القائم على الحدث بين فئتين مخصصين

StackOverflow https://stackoverflow.com/questions/2905114

  •  04-10-2019
  •  | 
  •  

سؤال

لدي مثل هذه المشكلة: لدي مكونان مخصصان ، لهما تسلسل هرمي خاص بهم ... أحدهما حاوية لآخر. لا بد لي من "التعرف عليهم" مع بعضهم البعض. الطريقة التي أحاول تحقيقها هي استخدام الأحداث العالمية (جانب واحد هو إطلاق النار والآخر يصطاد):

Application.application.addEventListener("Hello", function (data:Event):void{
        // .. some actions
    });

//and
Application.application.dispatchEvent(new Event(Hello));

كل شيء جيد جدًا ، ولكن هناك شيء واحد .. عندما أحاول التقاط الحدث ، لا يمكنني الوصول إلى الفصل ، الذي يصطاده. على سبيل المثال:

  1. الحاوية تطلق الحدث.
  2. الطفل يطغى عليه.
  3. ثم يجب إنشاء العلاقة بين الحاوية والطفل.

ولكن ، الشيء الوحيد الذي يمكن أن أتحققه هو نقل إشارة إلى الحاوية في Dynamicevent. هل هناك أي فرصة لإمكانية الوصول إلى الطفل في وظيفة معالج الأحداث. أو ربما هناك طريقة أكثر أناقة لحل هذه المشكلة ...

أي مساعدة سيكون موضع تقدير كبير :)

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

المحلول

في معظم الحالات ، ستمنحك إما Target أو CurrentTarget الوصول إلى المكون الذي يقوم بإطلاق الحدث.

http://livedocs.adobe.com/flex/3/langref/flash/events/event.html http://livedocs.adobe.com/flex/3/langref/flash/events/event.html#currenttarget http://livedocs.adobe.com/flex/3/langref/flash/events/event.html#target

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

أتصور أن لديك تسلسل هرمي مثل هذا:

طلب

--- حاوية 1

------- حاوية 2

أوصي بإطلاق الحدث من Container2 والاستماع إليه في Container1.

سيكون رمز الإرسال الخاص بك في Container2 شيء من هذا القبيل:

this.dispatchEvent(new Event('myCustomEvent'));

في Container1 ، يمكنك الاستماع إلى الحدث شيئًا من هذا القبيل:

container2.addEventListener('myCustomEvent', onMyCustomEvent);

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

نصائح أخرى

لقد فعلنا كما يقول Flextras ، قم بإنشاء أحداث مخصصة ، في حالتنا أحداث Cairngorm ، وبيانات مضافة بالفعل ، إشارة إلى الحاوية التي تريد أن يستجيب المستجيب عليها. لم يعجبني حقًا القيام بذلك بهذه الطريقة ، كما في المناسبات النادرة جدًا ، قد لا تكون الحاوية في حالة يمكن التفاعل معها. في حالتنا لدينا الكثير من الوحدات التي يمكن تحميلها ديناميكيًا يمكن أن تأتي وتذهب ، ثم Wham! فجأة تحصل على ما يعادل Flex من استثناء مؤشر فارغ. ولكن هذا هو الثمن الذي تدفعه عندما تكون غير متزامن للغاية ، والكثير من الفحص الفارغ والاستثناء.

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

لدى Mate مفهوم EventMap الذي يتيح لك تعيين بعض الأحداث للتفاعل مع وجهات نظرك بطريقة مختلفة. يمكنك ضخ القيم في خصائص العرض أو طرق الاتصال ضمن عرض عند حدوث أحداث معينة.

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

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