Я пытаюсь разобраться с reopenWidget() из Руководства для начинающих по разработке тем Discourse, и когда я пытаюсь создать компонент темы с использованием примера сниппета home-logo, получаю ошибку Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'offsetHeight'), из-за чего нарушается разметка страницы. Что-то изменилось в том, как использовать reopenWidget, или я что-то упускаю?
Не могли бы вы поделиться фрагментом кода, с которым у вас возникли проблемы?
Дело вот в чём:
<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>
Я скопировал этот код в точности из примера в Руководстве для начинающих по reopenWidget, ничего не меняя, и вставил его в новый компонент темы, где больше ничего нет. (Я также дважды проверил, что код размещён в разделе Header).
У меня установлены ещё несколько компонентов темы, но ни один из них не затрагивает home-logo. Я использую базовый хостинг, если это имеет значение. Я думал, что проблема может быть в том, что у меня не загружено тёмное лого, но ошибка возникает даже после загрузки тёмного логотипа.
К сожалению, здесь всё меняется очень быстро.
Основная проблема, скорее всего, в том, что вы скопировали код из руководства, вместо того чтобы следовать инструкциям.
Вот сравнение кода, который вы только что поделили, с текущим исходным кодом:
То есть они очень отличаются! (а значит, скорее всего, вызовут ошибки!)
Вам нужно сделать следующее (как указано в инструкциях): перейти к исходному коду, скопировать актуальную версию и изменить её под свои нужды.
Другими словами, код в руководстве устарел, хотя сами инструкции всё ещё актуальны.
Понял, спасибо! Это мой первый опыт работы с Discourse или Ember, поэтому я еще только разбираюсь. Я пробовал использовать reopenWidget с другой функцией, скопированной из текущего исходного кода, но у меня не получилось заставить это работать, но я попробую еще немного поиграть с настройками.
