У нас есть JS-функция, которая выполняется при событии DOMContentLoaded: document.addEventListener(“DOMContentLoaded”, OURFUNCTION).
Это работает корректно при перезагрузке страницы, но не срабатывает при навигации по сайту. Я предполагаю, что это связано с тем, что Discourse загружает DOM только один раз, а дальнейшая навигация обрабатывается на стороне клиента, как в SPA. Поэтому меня интересует, как можно запускать эту функцию при изменении маршрута в самом Discourse? Раньше для этого были простые способы через API плагинов, но эти API устарели, и я больше не вижу их использования в компонентах. Есть ли простой способ сделать это сейчас? Или нам нужно создавать целый компонент только для выполнения JavaScript при смене навигации? Спасибо.
onPageChange вызывается в следующем цикле выполнения, поэтому, думаю, в большинстве случаев он всё равно будет вызван после DOMContentLoaded, но я не могу гарантировать это на 100%.
Я вижу случаи использования, когда полагаются на onPageChange и сразу работают с элементами DOM. Кстати, откуда именно генерируется событие routeDidChange (РЕДАКТИРОВАНО: из Ember: RouterService | 6.11.0 | Ember API Documentation)?
Согласен с модификатором didInsert, действительно здорово!
Спасибо. Я внимательно изучил документацию и, судя по моим комментариям и последующему ответу участника на форуме Discourse, API плагина устарело и скоро будет отключено. Поэтому, хотя ваш код сейчас может работать, он скоро перестанет функционировать, вероятно, в будущих обновлениях. Вот почему я ищу лучшее решение. Создавать компонент Glimmer для этой задачи кажется излишним, поэтому я надеялся, что есть какое-то другое событие, которое мы могли бы использовать.
Кстати, мы протестировали это с помощью api.OnPageChange, и всё работает отлично. У нас пока не было случаев, когда содержимое DOM не было доступно при вызове OnPageChange, поэтому кажется, что событие срабатывает после DomContentLoaded. Но я не могу быть уверен на 100%. Спасибо за помощь в этом вопросе.