Sto cercando di capire reopenWidget() dalla Guida per principianti allo sviluppo di temi Discourse e quando provo a creare un componente tema con lo snippet di esempio home-logo, ottengo Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'offsetHeight') e questo interrompe il layout della pagina. È cambiato qualcosa nel modo di usare reopenWidget o mi sfugge qualcosa?
Ti dispiace condividere il pezzo di codice con cui stai avendo problemi?
È solo questo:
<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>
Che ho copiato direttamente dall’esempio della Guida per principianti sotto reopenWidget senza cambiare nulla, in un nuovo componente tema senza nient’altro. (E ho ricontrollato di aver messo il codice nell’Header).
Ho alcuni altri componenti tema installati, ma niente che tocchi home-logo. Sono su hosting di base qui, se questo fa differenza. Pensavo potesse essere perché non avevo caricato un logo scuro, ma succede ancora anche con un logo scuro caricato.
Purtroppo le cose si muovono velocemente qui.
Il problema di base è probabilmente che hai copiato il codice nella guida, piuttosto che seguire le istruzioni.
Questo è un confronto tra il codice che hai appena condiviso e il codice sorgente attuale:
cioè molto diverso! (e quindi probabilmente si romperà!)
Quello che devi fare (come da istruzioni) è andare al codice sorgente e copiare il codice attuale e modificarlo per soddisfare le tue esigenze.
In altre parole, il codice nella guida è obsoleto, se non le istruzioni, che sono ancora valide.
Capito, grazie! È la prima volta che lavoro con Discourse o Ember, quindi ci sto ancora prendendo la mano. Avevo provato a fare reopenWidget con un’altra funzione copiata dalla sorgente attuale e non ero riuscito a farlo funzionare, ma ci smanetterò ancora un po’.
