Ich versuche, reopenWidget() aus dem Leitfaden für Anfänger zur Entwicklung von Discourse-Themes zu verstehen, und wenn ich versuche, eine Theme-Komponente mit dem Beispiel-Home-Logo-Snippet zu erstellen, erhalte ich Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'offsetHeight') und es zerstört das Seitenlayout. Hat sich etwas an der Verwendung von reopenWidget() geändert oder übersehe ich etwas?
Könnten Sie bitte den Codeausschnitt teilen, mit dem Sie Probleme haben?
Es ist nur das hier:
<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>
Das habe ich direkt aus dem Beispiel im Anfängerleitfaden unter reopenWidget kopiert, ohne etwas zu ändern, in eine neue Theme-Komponente, in der sonst nichts drin ist. (Und doppelt geprüft, dass ich den Code in Header eingefügt habe).
Ich habe noch ein paar andere Theme-Komponenten installiert, aber keine, die home-logo berührt. Ich bin hier auf Basic Hosting, falls das eine Rolle spielt. Ich dachte, es könnte daran liegen, dass ich kein dunkles Logo hochgeladen hatte, aber es passiert immer noch, auch wenn ein dunkles Logo hochgeladen ist.
Leider gehen die Dinge hier schnell.
Das grundlegende Problem ist wahrscheinlich, dass Sie den Code in der Anleitung kopiert haben, anstatt den Anweisungen zu folgen.
Dies ist ein Vergleich des Codes, den Sie gerade geteilt haben, mit dem aktuellen Quellcode:
d.h. sehr unterschiedlich! (und bricht daher wahrscheinlich!)
Was Sie tun müssen (gemäß den Anweisungen) ist, zum Quellcode zu gehen und den aktuellen Code zu kopieren und diesen nach Ihren Bedürfnissen zu ändern.
Mit anderen Worten, der Code in der Anleitung ist veraltet, wenn auch nicht die Anweisungen, die immer noch gültig sind.
Verstanden, danke! Das ist mein erstes Mal, dass ich mit Discourse oder Ember arbeite, daher muss ich mich noch einarbeiten. Ich hatte versucht, reopenWidget mit einer anderen Funktion aus der aktuellen Quelle zu verwenden, und es hat nicht funktioniert, aber ich werde noch etwas herumprobieren.
