زر تذييل الموضوع: مفاتيح الاعتماد لا تعمل

لدي مشاكل في جعل dependentKeys تعمل في registerTopicFooterButton (موثق هنا)

التعليمات البرمجية الخاصة بي (مثال بسيط)

  api.registerTopicFooterButton({
    id: "my-topic-footer-button",
    action() {
      this.topic.updateTags(["my-tag"]);
    },
    title() {
      return "my.button.title";
    },
    label() {
      return "my.button.label";
    },
    dependentKeys: ["topic.tags"],
    disabled() {
      return this.topic.tags.includes("my-tag");
    }
  });

المتوقع: بمجرد الضغط على الزر، يتم تعيين علامات الموضوع إلى my-tag (يعمل)، مما يؤدي إلى إعادة عرض الزر، وتعطيله.
المتوقع: بمجرد إضافة العلامة يدويًا، يتم تعطيل الزر.

الواقع: لا يتم تشغيل إعادة العرض في أي من السيناريوهين.
يتم تعطيل/تمكين الزر بشكل صحيح عند تحديث الصفحة.

هل يمكن لأي شخص اكتشاف خطئي؟

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

سيؤدي امتلاك خاصية محسوبة تعتمد على topic.tags إلى إبطالها عند استبدال المصفوفة نفسها. لكنها لن تتسبب في إبطال عند إضافة/إزالة عناصر من المصفوفة.

لذلك أعتقد أنك ربما تريد topic.tags.@each (docs).

بشكل عام، نحاول الابتعاد عن الخصائص المحسوبة، والاتجاه نحو getters الأصلية/autotracking. أعتقد أننا سنضطر إلى تحديث واجهة برمجة تطبيقات topic-footer-buttons في مرحلة ما لدعم ذلك :thinking:

إعجابَين (2)

شكرا لك على الاستجابة السريعة حقا يا ديفيد!

ومع ذلك، فإن استخدام topic.tags.@each لا يحل هذه المشكلة… (على أي حال، ليس عندما تتم إضافة العلامة يدويا، وليس عندما يتم الضغط على الزر).
لا يتم تشغيل console.log في الدالة disabled(). ولا يتم تشغيله في displayed() أيضا.

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

عند النقر على الزر الخاص بك، هل يظهر الوسم الجديد بشكل صحيح في أعلى الموضوع؟

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

نعم، هذا يعمل بشكل جيد.

لقد جربت أيضًا this.topic.notifyPropertyChange("tags");

وحتى أنني لجأت إلى اليأس وحاولت التلاعب بخصائص أخرى (مثل this.topic.title = this.topic.title + "!" وتضمين topic.title في dependentKeys). هذا لا يعمل أيضًا. استخدام this.topic.set... لا يعمل أيضًا.

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

من المثير للاهتمام أنه إذا قمت بنسخ/لصق مثالك من OP وتشغيله محليًا، فيبدو أنه يعمل بشكل مثالي:

هل هناك أي سمات/إضافات أخرى يمكن أن تتداخل؟ أو ربما شيء مختلف في الكود “الحقيقي” الخاص بك، مقارنة بالمثال المصغر في OP؟

:thinking:

الكود “المصغر” الخاص بي في المنشور الأصلي هو الكود “الحقيقي” الخاص بي في الوقت الحالي. سأنقله إلى تثبيت نظيف تمامًا وأرى ما إذا كان ذلك سيغير أي شيء.

تحرير: نعم، إنه يعمل على تثبيت نظيف :sob: :sob:

سأقوم بإلغاء إدراج هذا الموضوع حتى لا أضطر إلى العيش مع هذا العار :wink:
سأقوم بتحديثك عندما أعرف ما الذي كان يسبب هذا.

شكراً لمساعدتك @david!!

إعجابَين (2)

تم إغلاق هذا الموضوع تلقائيًا بعد مرور 30 يومًا على آخر رد. لم يعد بالإمكان الردود الجديدة.