El botón de pie de página del tema no funciona

Tengo problemas para que dependentKeys funcione en registerTopicFooterButton (documentado aquí)

Mi código (ejemplo mínimo)

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

Esperado: una vez que presiono el botón, las etiquetas del tema se establecen en my-tag (funciona), lo que activa una nueva renderización del botón y lo deshabilita.
Esperado: una vez que agrego la etiqueta manualmente, el botón se deshabilita.

Realidad: la nueva renderización no se activa en ninguno de los escenarios.
El botón se deshabilita/habilita correctamente al actualizar la página.

¿Alguien puede detectar mi error?

1 me gusta

Tener una propiedad computada que dependa de topic.tags hará que se invalide cuando el array en sí sea reemplazado. Pero no causará invalidación cuando se agreguen o eliminen elementos del array.

Así que creo que probablemente quieras topic.tags.@each (docs).

En general, estamos tratando de alejarnos de las propiedades computadas y acercarnos a los getters nativos/autotracking. Supongo que tendremos que modernizar la API de topic-footer-buttons en algún momento para soportar eso :thinking:

2 Me gusta

¡Muchas gracias por la respuesta tan rápida, David!

Sin embargo, usar topic.tags.@each no lo resuelve… (de cualquier manera, no cuando la etiqueta se añade manualmente, ni cuando se pulsa el botón).
Un console.log en la función disabled() no se ejecuta. Tampoco se ejecuta en displayed().

1 me gusta

Al hacer clic en tu botón, ¿aparece la nueva etiqueta correctamente en la parte superior del tema?

1 me gusta

Sí, eso funciona bien.

También probé this.topic.notifyPropertyChange("tags");

e incluso recurrí a la desesperación e intenté manipular otras propiedades (como this.topic.title = this.topic.title + "!" e incluyendo topic.title en dependentKeys). Eso tampoco funciona. Usar this.topic.set... tampoco funciona.

1 me gusta

Curiosamente, si copio y pego tu ejemplo del OP y lo ejecuto localmente, parece funcionar perfectamente:

¿Hay algún otro tema/plugin que pueda estar interfiriendo? ¿O quizás algo diferente en tu código ‘real’, en comparación con el ejemplo mínimo del OP?

:thinking:

Mi código “mínimo” en el OP es mi código “real” en este momento. Lo moveré a una instalación completamente limpia y veré si eso cambia algo.

EDIT: sí, funciona en una instalación limpia :sob: :sob:

Voy a deslistar este tema para no tener que vivir con la vergüenza :wink:
Te actualizaré cuando descubra qué estaba causando esto.

Gracias por tu ayuda @david!!

2 Me gusta

Este tema se cerró automáticamente 30 días después de la última respuesta. Ya no se permiten nuevas respuestas.