مشاكل في تجاوز الـ getters في وحدة تحكم (3.0.0)

لدي هذا الرمز في المُهيئ الخاص بي، وهو يحاول تجاوز المُستدعي لـ allAdminRoutes:

    api.modifyClass('controller:admin-plugins', {
      pluginId: PLUGIN_ID,

      get allAdminRoutes() {
        return this.model
          .filter(p => p?.enabled)
          .map(p => {
            return p.admin_route;
          })
          .filter(Boolean);
      },
    });

إنه يفشل مع:

TypeError: this.model is undefined

الآن، لن أمانع، لكنه مجرد رمز المُستدعي الأصلي (لم أقم بتغييره بعد!)

ما الذي أفتقده؟ هل تجاوز المُستدعي بهذه الطريقة غير مدعوم بأي شكل من الأشكال أو أنه يُدخل نوعًا من مشكلة النطاق؟

4 إعجابات

يبدو أن هذه ليست مشكلة مع الأحدث. (كان هذا مجرد اختبار على الإنتاج.)

سأرى ما إذا كان بإمكاني إعادة إنتاج المشكلة على إصدار مستقر نظيف 3.0.0.

إعجاب واحد (1)

يجب أن يعمل المثال، وأنا لست على علم بأي تغييرات ذات صلة بين الإصدار المستقر والآن. أخبرنا إذا تمكنت من إعادة إنتاج المشكلة!

إعجاب واحد (1)

شكرا ديفيد. سأفعل. نعم لاحظت ذلك. الكرة بالتأكيد في ملعبي في الوقت الحالي لأن البيئة التي واجهت فيها هذا لم تكن نظيفة تمامًا.

إعجاب واحد (1)

حسنًا ديفيد، يبدو (وهذا غريب):

  • يعمل في بيئة الإنتاج
  • يفشل في بيئة التطوير 3.0.0 وما بعده (ربما قبل ذلك)
  • لقد اختبرت على بيئة تطوير عادية بدون دوكر، وأيضًا على بيئة تطوير دوكر مخصصة نظيفة جدًا (ولكن ربما غير مكتملة التكوين).

إليك الأخطاء:

حدث خطأ:

- أثناء التصيير:
  - المستوى الأعلى
    التطبيق
      جذر ديسكورس
        غلاف الشريط الجانبي
          مسؤول
            غلاف المسؤول
              عنصر التنقل
                رابط إلى
                  -رابط إلى
تم اكتشاف خطأ غير معالج (في الوعد) TypeError: أثناء إنشاء رابط للمسار "adminPlugins": هذا.نموذج غير معرف
    الحصول على جميع مسارات المسؤول plugins-admin.js:20

لاحظ أنه يمكنني وضع عبارة مصحح الأخطاء قبل return this.model ولن يتم تشغيل مصحح الأخطاء أبدًا.

لقد نظر @RGJ بلطف في هذا أيضًا ويمكنه إعادة إنتاج هذه النتيجة.

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

تم نقله إلى Bug في الوقت الحالي …

إعجابَين (2)

حسنًا، نحن أكثر تأكيدًا بوجود مشكلة هنا… حيث تم ذكر mergeMixins في تتبع المكدس

(شكرًا لـ @RGJ على اكتشاف هذا)

4 إعجابات

حفر رائع - شكراً @merefield و @RGJ

لست متأكداً من مقدار ما يمكننا فعله لإصلاح هذا داخل Discourse - كما لاحظت، تبدو المشكلة في مكان أعلى في Ember. ربما يمكننا إصلاح الطريقة التي تسبب المشكلة :thinking:

للبدء، أضفت حالة اختبار بسيطة تفشل حتى نتمكن من تتبع التقدم. هناك بعض التعليقات في الاختبار تصف سبب إثارة المشكلة بواسطة نظام modifyClass الخاص بنا:

4 إعجابات

نعم، شكراً لجهودكم أيضاً. هل من الغريب أنهم تركوا هذه المشكلة دون معالجة؟ هل نعرف ما إذا كان (Ember) 4.x سيحلها؟

للأسف، يبدو أن المشكلة لا تزال قائمة في Ember 4.x :cry:

إعجاب واحد (1)

من المثير للاهتمام أن هذا يبدو التقدم الوحيد في مشروع Ember، ضمن PR المرتبط الذي لا يزال قيد المسودة. أتساءل عما إذا كان كل ما هو مطلوب هو طلب مهذب لتحديد أولوياته عندما يصبح الوقت متاحًا؟:

أتفهم تمامًا أن هذا تم فتحه بواسطة أحد الموظفين في طرف ثالث.

هل يستحق الأمر طرح مشكلة في GitHub - emberjs/ember.js: Ember.js - A JavaScript framework for creating ambitious web applications والإشارة إلى هذا PR، وهذا الموضوع، واختبارك؟

نعم، يعتمد اختباري على اختبارهم (ولكن مع واجهة برمجة تطبيقات api.modifyClass الخاصة بـ discourse). لا أعتقد أنه يجب علينا فتح مشكلة جديدة - إنها متطابقة 100٪ مع المشكلة المفتوحة بالفعل. سنرى ما إذا كان بإمكاننا فعل أي شيء للحصول على الأولوية.

3 إعجابات

نحقق بعض التقدم هنا - لدينا الآن طلب سحب (PR) مع إصلاح مفتوح على [BUGFIX LTS] Don't run getters while applying mixins by wycats · Pull Request #20388 · emberjs/ember.js · GitHub

بمجرد دمج هذا ونقله إلى Ember 3.28، سنهدف إلى تطبيقه على Discourse في أسرع وقت ممكن.

3 إعجابات

إعادته؟! تساءلت عن ذلك، أخبار رائعة!

شكراً لك على توجيه هذا يا ديفيد!

تم إصدار هذا الإصلاح الآن كجزء من Ember 3.28.12، ولقد حدثنا Discourse لاستخدامه. يرجى إخبارنا إذا كنت لا تزال ترى أي مشاكل مع modifyClass بعد التحديث إلى أحدث إصدار من Discourse.

6 إعجابات

رائع ديفيد، شكراً جزيلاً!

إعجابَين (2)

تم إغلاق هذا الموضوع تلقائيًا بعد 9 أيام. لم يعد يُسمح بالردود الجديدة.