DiscourseのEmber APIでiframeを挿入するのに問題があります

いくつかポインターを挙げます。

  • サイト設定はサービスに移動されました。

    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 ウィジェットでのカスタマイズは、あなたのコンテキストでは非推奨です。詳細はこちら: https://meta.discourse.org/t/upcoming-header-changes-preparing-themes-and-plugins/296544。
    この場合、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> 構文を使用するには、ファイル拡張子を .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 で再レンダリングするためのコードは、グリマーコンポーネントでは機能しないと思います。

    注(テスト後): ただし、ヘッダーはロゴを JSON から取得する前にレンダリングされるため、どちらのソリューションも機能しません。これに対する既製のソリューションはありません。より良い方法があるかどうかはわかりません。JSON の読み込みをサービスに移動し、結果を追跡することをお勧めします。次に、上記のプラグインアウトレットをグリマーコンポーネントで使用します。これにより、追跡変数に基づいてコンポーネントの更新が自動的にトリガーされます。

    これにより、ある程度機能します。コンポーザーのような動作する部分はまだありません。これについてはあまり深く調べていません。少なくとも、これ以上ブロックするエラーはありません。:slightly_smiling_face:

    お役に立てば幸いです。

「いいね!」 3