أحاول فهم 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 مع وظيفة أخرى من المصدر الحالي ولم أتمكن من جعلها تعمل، لكنني سأجرب المزيد.
