محاولة إرفاق Glimmer تفشل مع خطأ

أعمل على طلب سحب (PR) إلى إضافة Poll.

أحاول عرض مكون Glimmer كعقدة ورقة في شجرة الأدوات (widget tree) كما فعلت عدة مرات من قبل، ولكنني أواجه هذا الخطأ الغريب الذي لم أره من قبل:

TypeError: this.parentMountWidgetComponent is undefined

يحدث هذا السطر:

يبدو أن this.widget?._findView() || this._emberView

هو undefined.

(this.widget موجود)

الكود الخاص بي في مراحله المبكرة جدًا موجود هنا:

هل استخدام RenderGlimmer في هذا السياق قانوني؟

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

هل يعتمد هذا على وجود خاصية لدى أحد الأسلاف؟

this._findAncestorWithProperty("_emberView")

والتي تعود بقيمة غير محددة.

أو أن العنصر نفسه يحتوي على خاصية _emberView (وهو ما لا يفعله)

أفترض أن السلف كان يجب أن تكون لديه هذه الخاصية هنا:

حسنًا، مزيد من المعلومات.

عند عرض الاستطلاع (كمجموعة من الأدوات المصغرة)، يتم تنفيذ هذا السطر، ولكن عند العودة للتصويت، لا يتم تنفيذه، وبالتالي لسبب ما لا يوجد سلف لديه _emberView (أو لم يتم العثور عليه).

قد يكون مصدر هذه المشكلة هو أن الأداة المصغرة لا يتم إعادة عرضها أبدًا:

rerenderWidget() {

لا يتم تشغيلها مرة أخرى على الرغم من إضافة مجموعة جديدة من الأدوات المصغرة … لذا لم يتم تعيين هذه الخاصية أبدًا.

… وبالتالي قد يكون الحل هو جدولة إعادة عرض عند الضغط على زر التصويت …

  toggleResults() {
    **this.scheduleRerender();**
    this.state.showResults = !this.state.showResults;
  },

… لا، هذا لا يحل المشكلة.

مزيد من المعلومات:

  _findAncestorWithProperty(property) {
    let widget = this;
    while (widget) {
      const value = widget[property];
      if (value) {
        return widget;
      }
      widget = widget.parentWidget;
    }
  }

هذا يبحث في الشجرة عن الخاصية.

في العرض الأولي، تظهر هذه الخاصية عند مستوى post-stream.

ولكن بطريقة ما يبدو أن الأدوات المصغرة تفقد أسلافها …

حسنًا، لقد تعمقت قليلاً:

هذا هو التسلسل الهرمي الذي يحدث فيه اجتياز الأداة:

discourse-poll-option-dropdown-245da0f65a66dbd539bcd27e501d759a [widget.js:250:14](webpack://discourse/widgets/widget.js)

discourse-poll-option-245da0f65a66dbd539bcd27e501d759a [widget.js:250:14](webpack://discourse/widgets/widget.js)

poll-container-poll-1247 [widget.js:250:14](webpack://discourse/widgets/widget.js)

poll-poll-1247

الآن، آخر أداة موجودة… ليس لها أداة أصل.

parentWidget هو undefined.

والأمر المثير للاهتمام هو أنه لا يحتوي على خاصية “_emberView”، لذا تكون النتيجة undefined.

لذلك، لا يتم العثور على الخاصية وفي تلك النقطة يتوقف الاجتياز.

3 إعجابات

تعد إضافة الاستطلاع غير عادية بعض الشيء من حيث أن الأداة المساعدة مثبتة داخل HTML المُعالج للمنشور، بدلاً من تثبيتها مباشرة داخل قالب Ember عبر المكون \u003cMountWidget. لذلك، ربما نحتاج إلى إضافة بعض المنطق الإضافي هنا… سألقي نظرة :eyes:

شكرًا للإبلاغ يا @merefield!

3 إعجابات

أعتقد أنه إذا قمنا بدمج هذا، فيجب أن يجعل الكود الخاص بك يعمل يا @merefield

إنه ليس جميلاً بشكل خاص، ولكني أعتقد أنه لا بأس بما أن هذا موقف نادر جدًا، ونأمل أن نزيل كل هذه الأشياء المتعلقة بالـ widget/RenderGlimmer في المستقبل القريب جدًا :crossed_fingers:

4 إعجابات

شكرا ديفيد. نعم، من المنطقي أن يكون الحل الوسط كافياً في الوقت الحالي :+1:

سأقوم باختباره بمجرد دمجه (وسيتعين علي تحديث نسختي! :sweat_smile:)

4 إعجابات

أقدر حقًا سرعة إنجاز هذا يا ديفيد.

أؤكد أن هذا يعمل الآن بالنسبة لي.

سأقوم بالنشر هنا إذا واجهت أي مشاكل أخرى مع هذا الترتيب.

(تنويه لقطة الشاشة: أيام مبكرة جدًا لهذا المشروع!)

إعجابَين (2)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.