reopenWidget がエラーをスローします

Beginner’s Guide to Developing Discourse ThemesreopenWidget() について理解しようとしていますが、home-logo スニペットの例でテーマコンポーネントを作成しようとすると、Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'offsetHeight') というエラーが発生し、ページレイアウトが壊れてしまいます。reopenWidget() の使い方が変更されたのでしょうか、それとも何か見落としているのでしょうか?

「いいね!」 1

問題のあるコードを共有していただけますか?

「いいね!」 2

これは次のとおりです。

<script type="text/discourse-plugin" version="0.8.13">
api.reopenWidget("home-logo", {
  logo() {
    const { siteSettings } = this,
      { iconNode } = require("discourse/helpers/fa-icon-node"),
      h = require("virtual-dom").h,
      altLogo = settings.Alternative_logo_url,
      altLogoSmall = settings.Alternative_small_logo_url,
      mobileView = this.site.mobileView,
      mobileLogoUrl = siteSettings.mobile_logo_url || "",
      showMobileLogo = mobileView && mobileLogoUrl.length > 0;
    (logoUrl = altLogo || ""),
    (title = siteSettings.title);
    if (!mobileView && this.attrs.minimized) {
      const logoSmallUrl = altLogoSmall || "";
      if (logoSmallUrl.length) {
        return h("img#site-logo.logo-small", {
          key: "logo-small",
          attributes: { src: logoSmallUrl, width: 33, height: 33, alt: title }
        });
      } else {
        return iconNode("home");
      }
    } else if (showMobileLogo) {
      return h("img#site-logo.logo-big", {
        key: "logo-mobile",
        attributes: { src: mobileLogoUrl, alt: title }
      });
    } else if (logoUrl.length) {
      return h("img#site-logo.logo-big", {
        key: "logo-big",
        attributes: { src: logoUrl, alt: title }
      });
    } else {
      return h("h1#site-text-logo.text-logo", { key: "logo-text" }, title);
    }
  }
});
</script>

これは、Beginner’s GuidereopenWidget の例から、何も変更せずに新しいテーマコンポーネントにコピーしたものです。(コードをヘッダーに入力したことも確認しました)。

他にいくつかのテーマコンポーネントがインストールされていますが、home-logo に触れるものはありません。基本的なホスティングを使用していますが、関係があるかもしれません。ダークロゴをアップロードしていないことが原因かと思いましたが、ダークロゴをアップロードしても同じことが起こります。

「いいね!」 1

残念ながら、ここでは物事は急速に進みます。

基本的な問題は、おそらくガイドのコードをコピーしただけで、指示に従っていないことです。

これは、あなたが共有したコードと現在のソースコードの比較です。

つまり、非常に異なっています!(したがって、壊れる可能性が高いです!)

あなたがすべきこと(指示通り)は、ソースコードにアクセスし、現在のコードをコピーして、それをあなたのニーズに合わせて変更することです。

言い換えれば、ガイドのコードは最新ではなく、指示はまだ有効ですが、コードは古くなっています。

「いいね!」 2

承知いたしました、ありがとうございます! DiscourseやEmberでの作業は初めてなので、まだ慣れていないところです。他の関数を現在のソースからコピーしてreopenWidgetを試しましたが、うまくいきませんでした。しかし、もう少し試してみます。