واجهت بعض المشاكل عند إدراج iframes باستخدام Ember API الخاص بـ Discourse

إليك بعض النقاط الهامة:

  • تم نقل إعدادات الموقع إلى خدمة:

    const siteSettings = container.lookup('service:site-settings');
    if (!siteSettings.docuss_enabled) {
      return;
    }
    
  • location:discourse-locationlocation:history

  • afterRender().then(() => onAfterRender(container));
    afterRender هو مُزين تضعه فوق دالة في فئة المكون؛ لا يُفترض استخدامه مباشرة كدالة.
    أعتقد أنك تريد (لا يبدو أنه ضروري)، ربما:

    import { schedule } from '@ember/runloop';
    schedule("afterRender", () => onAfterRender(container))
    
  • لديك جزء كبير من التعليمات البرمجية خارج دالة composeStateChanged، على ما يبدو.
    أيضًا، يمكنك استخدام خدمة الموجه هنا: container.lookup('router:main').transitionTo(path);this.router.transitionTo(path);

  • تم تحديث الواجهة الأمامية. تخصيص في أداة home-logo مهمل في سياقك. مزيد من المعلومات هنا: Upcoming Header Changes - Preparing Themes and Plugins.
    في حالتك، ستحتاج إلى إعداد glimmer header mode إلى auto أو enabled. بعد ذلك، يمكنك استخدام منفذ إضافة لاستبدال المحتوى:

    api.renderInOutlet("home-logo-contents", `<template>
        <HomeLogoContents
          @logoSmallUrl={{container.dcsHeaderLogo._smallLogoUrl}}
          @logoUrl={{container.dcsHeaderLogo._logoUrl}}
          @minimized={{@outletArgs.minimized}}
          @mobileLogoUrl={{container.dcsHeaderLogo._mobileLogoUrl}}
          @showMobileLogo={{@outletArgs.showMobileLogo}}
          @title={{@outletArgs.title}}
        />
      </template>`);
    

    ملاحظة: لاستخدام صيغة template في glimmer، تأكد من تغيير امتداد الملف إلى .gjs.
    يمكنك أيضًا استخدام هذه الطريقة:

     api.registerValueTransformer("home-logo-image-url", (transformer) => {
        let url = transformer.value;
        if (transformer.context.name === 'logo') {
          url = container.dcsHeaderLogo._logoUrl;
        } else if (transformer.context.name === 'logo_small') {
          url = container.dcsHeaderLogo._smallLogoUrl;
        } else if (transformer.context.name === 'logo_mobile') {
          url = container.dcsHeaderLogo._mobileLogoUrl;
        }
        return url;
      });
    

    لتغيير عنوان URL:

    api.registerValueTransformer("home-logo-href", () => container.dcsHeaderLogo._href);
    

    ملاحظة: أعتقد أن التعليمات البرمجية لإعادة التصيير في setLogo لن تعمل على مكون glimmer.

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

    مع ذلك، يعمل الأمر بطريقة ما. لا تزال هناك أجزاء غير عاملة مثل المنشئ. لم أتعمق في هذا. على الأقل، لم يعد هناك خطأ مانع. :slightly_smiling_face:

    آمل أن يكون هذا مفيدًا.

3 إعجابات