Кнопка подвала темы: зависимые ключи не работают

У меня возникли проблемы с тем, чтобы 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 (работает), что должно вызывать перерисовку кнопки и её отключение.
Ожидание: если добавить тег вручную, кнопка должна отключиться.

Реальность: перерисовка не происходит ни в одном из сценариев.

Кнопка корректно отключается/включается при обновлении страницы.

Кто-нибудь может найти мою ошибку?

Вычисляемое свойство, зависящее от topic.tags, будет сбрасываться при замене самого массива. Однако добавление или удаление элементов из массива не вызовет сброса.

Поэтому, скорее всего, вам нужно использовать topic.tags.@each (документация).

В целом мы стараемся отказаться от вычисляемых свойств в пользу нативных геттеров и автотрекинга. Думаю, нам в какой-то момент придётся модернизировать API topic-footer-buttons, чтобы поддержать это :thinking:

Спасибо за очень быстрый ответ, Дэвид!

Однако использование topic.tags.@each не решает эту проблему… (ни в том случае, когда тег добавляется вручную, ни при нажатии кнопки).

console.log в функции disabled() не выполняется. Он не выполняется и в функции displayed().

Когда вы нажимаете свою кнопку, новый тег правильно отображается вверху темы?

Да, это работает нормально.

Я также пробовал this.topic.notifyPropertyChange("tags");

и даже в отчаянии попытался манипулировать другими свойствами (например, this.topic.title = this.topic.title + "!" и включение topic.title в dependentKeys). Это тоже не работает. Использование this.topic.set... также не помогает.

Интересно, что если я скопирую/вставлю ваш пример из первого сообщения и запущу его локально, всё работает идеально:

Могут ли быть какие-то другие темы или плагины, которые мешают? Или, возможно, в вашем «реальном» коде есть какие-то отличия по сравнению с минимальным примером из первого сообщения?

:thinking:

Мой «минимальный» код в первом сообщении — это мой «реальный» код на данный момент. Я перенесу его на совершенно чистую установку и посмотрю, изменит ли это что-то.

РЕДАКТИРОВАНИЕ: Да, на чистой установке это работает :sob: :sob:

Я уберу эту тему из списка, чтобы мне не пришлось жить с этим стыдом :wink:
Я обновлю вас, когда узнаю, что вызывало эту проблему.

Спасибо за вашу помощь @david!!