Ich habe einige Probleme beim Einfügen von iframes mit der Ember API von Discourse

Hier sind ein paar Hinweise:

  • Die Website-Einstellungen wurden in einen Dienst verschoben:

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

  • afterRender().then(() => onAfterRender(container));
    afterRender ist ein Dekorator, den Sie über einer Methode in einer Komponentklasse platzieren. Sie sollten ihn nicht direkt als Funktion verwenden.
    Ich glaube, Sie möchten (es scheint nicht notwendig zu sein), möglicherweise:

    import { schedule } from '@ember/runloop';
    schedule("afterRender", () => onAfterRender(container))
    
  • Sie haben ein großes Stück Code außerhalb der composeStateChanged-Funktion, scheint es.
    Außerdem können Sie hier den Router-Dienst verwenden: container.lookup('router:main').transitionTo(path);this.router.transitionTo(path);

  • Der Header wurde modernisiert. Die Anpassung im home-logo-Widget ist in Ihrem Kontext veraltet. Weitere Informationen hier: Upcoming Header Changes - Preparing Themes and Plugins.
    In Ihrem Fall müssen Sie die Einstellung glimmer header mode auf auto oder enabled setzen. Dann können Sie einen Plugin-Outlet verwenden, um den Inhalt zu ersetzen:

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

    Hinweis: Um die Glimmer-Syntax <template> zu verwenden, stellen Sie sicher, dass Sie die Dateierweiterung in .gjs. umbenennen.
    Sie können auch diesen Weg gehen:

     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;
      });
    

    Um die URL zu ändern:

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

    Hinweis: Ich glaube, der Code zum Neu-Rendern in setLogo funktioniert bei einer Glimmer-Komponente nicht.

    Hinweis nach dem Testen: Keine der beiden Lösungen wird jedoch funktionieren, da der Header gerendert wird, bevor Sie die Logos aus dem JSON abrufen können. Ich habe keine fertige Lösung dafür. Ich bin mir nicht sicher, ob es einen besseren Weg gibt: Ich würde das Laden des JSON in einen Dienst verschieben und das Ergebnis verfolgen. Dann verwenden Sie den Plugin-Outlet oben mit einer Glimmer-Komponente. Auf diese Weise können Sie basierend auf einer Tracking-Variablen automatisch ein Update der Komponente auslösen.

    Damit funktioniert es irgendwie. Es gibt immer noch keine funktionierenden Teile wie den Composer. Ich habe das nicht zu tief untersucht. Zumindest gibt es keinen blockierenden Fehler mehr. :slightly_smiling_face:

Ich hoffe, das hilft.

3 „Gefällt mir“