我正在尝试理解Discourse 主题开发入门指南中的 reopenWidget() 函数,当我尝试使用 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 Guide 的 reopenWidget 部分复制过来的,没有做任何修改,然后在一个新的主题组件中,除了这个代码什么都没加。(并且仔细检查过我把代码放到了 Header 部分)。
我安装了几个其他的主题组件,但没有一个会触及 home-logo。我使用的是基础托管,这可能会有影响吗?我以为可能是因为我没有上传深色标志,但即使上传了深色标志,问题依然存在。
1 个赞
这里事情的进展很快。
基本问题可能是你复制了指南中的代码,而不是遵循说明。
这是你刚才分享的代码与当前源代码的比较:
也就是说,它们非常不同!(因此很可能出错!)
你需要做的是(按照说明),转到源代码并复制当前代码,然后根据你的需要进行更改。
换句话说,指南中的代码已经过时了,即使说明没有过时,但说明仍然有效。
2 个赞
好的,谢谢!这是我第一次使用 Discourse 或 Ember,还在熟悉中。我曾尝试使用 reopenWidget 和从当前源复制的另一个函数,但未能成功,我会再多尝试一下。
