مشاكل في تجاوز الـ 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 (وربما قبل ذلك)
  • لقد اختبرت ذلك في بيئة تطوير قياسية بدون Docker، وكذلك في بيئة تطوير Docker مخصصة ونظيفة للغاية (ولكن قد تكون إعداداتها غير مكتملة).

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

حدث خطأ:

- أثناء العرض:
  - المستوى العلوي
    التطبيق
      discourse-root
        sidebar-wrapper
          admin
            admin-wrapper
              nav-item
                link-to
                  -link-to
خطأ غير معقب (في الوعد) TypeError: أثناء إنشاء رابط للمسار "adminPlugins": this.model غير معرف
    get allAdminRoutes admin-plugins.js:20

لاحظ أنه يمكنني إضافة جملة debugger قبل return this.model، لكنها لا تشغّل نقطة التوقف أبدًا.

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

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

تم نقله إلى قناة Contribute > 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 أيام. لم يعد يُسمح بالردود الجديدة.