Edit: переклассифицировано как ошибка.
Полное воспроизведение ниже.
Я использую api.modifyClass в компоненте темы.
На большинстве страниц это работает нормально, но в некоторых темах свойство не добавляется к модели пользователя при перезагрузке страницы. Я не могу понять, почему это работает на большинстве тем, но не работает на некоторых, или что общего у тем, где это не работает.
Понимает ли кто-нибудь, что я делаю не так здесь?
TL;DR Добавление api.container.lookup для модели ниже modifyClass обходит эту проблему.
В более новых версиях это обязательно. Вчера я даже отправил несколько PR для тем, чтобы добавить это поле. Похоже, я наконец-то становлюсь разработчиком плагинов и тем.
Да, pluginId, я полагаю, нужен для предотвращения повторного применения модификаций. Отсутствие этого параметра не должно объяснять, почему модификация вообще не была выполнена ни разу?
Мне казалось, что если что-то ещё изменяет класс, то это может быть гонка, чтобы увидеть, кто это сделал. Но JavaScript для меня всё ещё в основном загадка.
… теоретически оба варианта должны оцениваться при обновлении браузера, после чего гонка условий на переходе маршрута становится неактуальной, так как модификация уже должна быть применена…
Хорошо, я получил уведомление от полезного поста, который, похоже, был удалён в это время.
Предложение не сработало, но в нём содержался намёк, который помог мне решить эту проблему.
Добавление следующего фрагмента ниже неработающего кода последовательно устраняло проблемы, с которыми я сталкивался. Я протестировал это на нескольких независимых форумах, как на стабильной версии, так и на версии с тестами. Думаю, это должно быть переклассифицировано как #баг …
Я добавил console.log в код API плагинов app/assets/javascripts/discourse/app/lib/plugin-api.js, чтобы он выводил сообщение каждый раз, когда вызывается modifyClass.
Я удалил все внешние плагины, чтобы убедиться, что конфликта нигде нет.
Воспроизведение:
создайте пустой форум на ветке stable (без Ember CLI). Это также не работает на ветке tests-passed (без Ember CLI). Я не тестировал это с Ember CLI.
добавьте компонент темы со следующим кодом в раздел Common - Head