Il pulsante del footer dell'argomento e le chiavi dipendenti non funzionano

Ho problemi a far funzionare dependentKeys in registerTopicFooterButton (documentato qui)

Il mio codice (esempio minimo)

  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");
    }
  });

Atteso: una volta premuto il pulsante, i tag per l’argomento vengono impostati su my-tag (funziona), il che innesca un re-render del pulsante e lo disabilita.
Atteso: una volta aggiunto manualmente il tag, il pulsante viene disabilitato.

Realtà: il re-render non viene innescato in nessuno dei due scenari.
Il pulsante è correttamente disabilitato/abilitato al refresh della pagina.

Qualcuno può individuare il mio errore?

1 Mi Piace

Avere una proprietà calcolata che dipende da topic.tags causerà la sua invalidazione quando l’array stesso viene sostituito. Ma non causerà l’invalidazione quando elementi vengono aggiunti/rimossi dall’array.

Quindi penso che probabilmente desideri topic.tags.@each (docs).

In generale stiamo cercando di allontanarci dalle proprietà calcolate e di avvicinarci ai getter nativi/autotracking. Immagino che dovremo modernizzare l’API di topic-footer-buttons a un certo punto per supportare questo :thinking:

2 Mi Piace

Grazie per la risposta molto rapida David!

Tuttavia, l’uso di topic.tags.@each non risolve questo problema… (in ogni caso, né quando il tag viene aggiunto manualmente, né quando viene premuto il pulsante).

Un console.log nella funzione disabled() non viene eseguito. Non viene eseguito nemmeno in displayed().

1 Mi Piace

Quando fai clic sul tuo pulsante, la nuova etichetta viene visualizzata correttamente in cima all’argomento?

1 Mi Piace

Sì, funziona bene.

Ho anche provato this.topic.notifyPropertyChange("tags");

E sono anche disperato e ho provato a manipolare altre proprietà (come this.topic.title = this.topic.title + "!" e includendo topic.title in dependentKeys). Anche questo non funziona. Usare this.topic.set... non funziona neanche.

1 Mi Piace

È interessante notare che, se copio/incollo il tuo esempio dall’OP ed eseguo localmente, sembra funzionare perfettamente:

Ci sono altri temi/plugin che potrebbero interferire? O forse qualcosa di diverso nel tuo codice ‘reale’, rispetto all’esempio minimale nell’OP?

:thinking:

Il mio codice “minimale” nell’OP è il mio codice “reale” al momento. Lo sposterò in un’installazione completamente pulita e vedrò se questo cambia qualcosa.

MODIFICA sì, funziona su un’installazione pulita :sob: :sob:

Rimuoverò questo argomento dall’elenco in modo da non dover convivere con la vergogna :wink:
Vi aggiornerò quando scoprirò cosa stava causando questo problema.

Grazie per il tuo aiuto @david!!

2 Mi Piace

Questo argomento è stato chiuso automaticamente 30 giorni dopo l’ultima risposta. Non sono più consentite nuove risposte.