J’essaie de comprendre reopenWidget() du Guide pour débutants sur le développement de thèmes Discourse et lorsque j’essaie de créer un composant de thème avec l’extrait home-logo de l’exemple, j’obtiens Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'offsetHeight') et cela casse la mise en page. Quelque chose a-t-il changé dans la façon d’utiliser reopenWidget ou est-ce que je manque quelque chose ?
Auriez-vous l’amabilité de partager le morceau de code qui pose problème ?
C’est juste ça :
<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>
Que j’ai copié directement de l’exemple du Guide du débutant sous reopenWidget sans rien changer, dans un nouveau composant de thème sans rien d’autre. (Et j’ai vérifié que j’ai bien mis le code dans l’en-tête).
J’ai quelques autres composants de thème installés, mais rien qui touche à home-logo. J’utilise l’hébergement de base ici, si cela a une importance. Je pensais que cela pouvait être dû au fait que je n’avais pas de logo sombre téléchargé, mais cela se produit toujours même avec un logo sombre téléchargé.
Malheureusement, les choses évoluent vite ici.
Le problème de base est probablement que vous avez copié le code du guide, plutôt que de suivre les instructions.
Voici une comparaison du code que vous venez de partager avec le code source actuel :
c’est-à-dire très différent ! (et donc susceptible de casser !)
Ce que vous devez faire (conformément aux instructions) est d’aller au code source et de copier le code actuel et de le modifier pour répondre à vos besoins.
En d’autres termes, le code du guide est obsolète, sinon les instructions, qui sont toujours valides.
Compris, merci ! C’est la première fois que je travaille avec Discourse ou Ember, donc je commence tout juste à m’y habituer. J’avais essayé de faire reopenWidget avec une autre fonction copiée de la source actuelle et je n’arrivais pas à la faire fonctionner, mais je vais expérimenter encore un peu.
