لم يتم العثور على المتغير المتعقب؟

هذا هو الكود الخاص بي:

import { apiInitializer } from "discourse/lib/api";
import { iconNode } from "discourse-common/lib/icon-library";
import { tracked } from "@glimmer/tracking";

export default apiInitializer((api) =
> {
  @tracked iconName = settings.category_lock_icon || 'lock'; // العودة إلى 'lock' إذا لم يتم تعريف الإعداد
  @tracked lockIcon = iconNode(this.iconName);

المثير للإحباط، تخبرني وحدة تحكم المتصفح بأن ReferenceError: iconName is not defined. بالنظر إلى الملف في أدوات مطوري المتصفح، يبدو كالتالي:

iconName = settings.category_lock_icon || 'lock'; // Fallback to 'lock' if setting is not defined
lockIcon = (0, _iconLibrary.iconNode)((void 0).iconName);

هذا، مقارنة بمكون آخر قمت بإنشائه يستخدم متغيرات متعقبة (والذي يعمل):

#buttonIcon = (() =
> (dt7948.i(this, "buttonIcon"), void 0))();

، حيث الكود الأصلي هو

@tracked buttonIcon = localStorage.getItem('buttonIcon') != null ? localStorage.getItem('buttonIcon') : "bug";

هل أقوم بشيء خاطئ؟

لا تحتاج إلى تتبع هذه. ستكون ثابتة لذا لا داعي لها. تحتاج فقط إلى تتبع الأشياء التي ستكون ديناميكية والتي تريد تشغيل (getters) بها. استخدم DIcon بدلاً من ذلك.

إعجاب واحد (1)

فهمت. شكرًا للمساعدة؛ سأجرب ذلك.

إعجابَين (2)

في كل مرة تقوم فيها بالتتبع، فإنك تستخدم الموارد، لذا حافظ على ذلك عند الحد الأدنى. إنه ليس بالأمر الجلل ولكنه ممارسة جيدة ألا تقوم بالتتبع إذا كان شيء ما لن يتغير أثناء زيارة الصفحة. أنا متأكد من أنه يمكنك توقع تحديث واحد للصفحة بين تغييرات الإعدادات.

3 إعجابات

شكرا على النصيحة! سأضع ذلك في الاعتبار.

إعجاب واحد (1)

مرحباً @merefield ، لا أستطيع تجاوز هذه الدالة:

function ifProtected() {
  if(category.read_restricted) {
    return this.lockIcon;
  }
}

أي نصيحة حول كيفية إرجاع هذا؟ بما أن هذا في ملف .gjs، هل من الممكن إرجاع

return <template>{{icon this.iconName}}</template>

؟

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.