renderInOutletに関するトラブル

何か非常に愚かなことをしているに違いないが、それに気づくことができない。ここに投稿すれば、自分がどれほど愚かであるかを誰にも知られる前に、それに気づいて削除できることを願っている。

「HELLO WORLD」がホームページに表示されるはずだ。コンソールには「THIS IS THE HOMEPAGE」と表示されている。それが実行されていることはわかっている。しかし、そこにはない。

他に何も思いつかなかったので、「Extra item」を追加してみた。これも表示されない。

ファイルを.gjsにリネームする前にエラーが出ていたので、ファイルに注意を払っており、何かが起こっていることを示唆している。

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer("1.8.0", (api) => {
  // ホームページかどうかを確認する
  api.onPageChange(() => {
    const router = api.container.lookup("service:router");
    const url = router?.currentURL;
    const isHomePage = url === "/";
    api.renderInOutlet("top-notices", <template>Extra item</template>);
    if (isHomePage) {
      console.log("THIS IS THE HOMEPAGE");
      api.renderInOutlet("after-header", <template>HELLO WORLD</template>);
    }
  });
});

アウトレットがまだレンダリングされていないため、アタッチするアウトレットがない可能性があります。

onPageChange はルート変更時にトリガーされます…

それはまさに私が言っているような馬鹿げたことに聞こえます!!

これをホームページだけで起こしたいのです。

でもそうですね!もしあのレンダーの何かをonPageChangeの外に出すと、レンダリングされます。

ではURLが / の場合だけこれを起こすにはどうすればいいでしょうか?

もしかして、実際のコンポーネントを作って、shouldRender()呼び出しを追加しますか?

ルーターサービス(コンポーネント内)を追加し、ゲッターを設定する必要があります。

「いいね!」 2

ありがとうございましぇん!ほとんどの言葉の意味はわかります!

「いいね!」 1

お役に立てれば幸いです!すべて稼働したら確認してください!

「いいね!」 1

ああ、ベイビー!サービスとは何か、ゲッターとは何か、本当によくわかった!これでテキストはホームページに表示され、別のページ(そしておそらく他のすべてのページ!)には表示されなくなった!

「いいね!」 4

このトピックは最後の返信から30日後に自動的に終了しました。新しい返信は許可されていません。