Кажется, я упускаю что-то очевидное, но не могу понять, что именно. У меня есть компонент темы, который загружает некоторые виджеты, и я использую следующий код для их перерисовки после перехода пользователя на новую страницу (взято из категорий баннеров):
Однако этот код обновляет виджет только после загрузки новой страницы. Я надеюсь скрыть содержимое моего виджета сразу после клика на ссылку перехода на другую страницу, аналогично тому, как это реализовано в нативном функционале Discourse: элементы скрываются и сразу же показывается индикатор загрузки при клике.
Я вижу в файле app\assets\javascripts\discourse\app\templates\discovery.hbs, что div-контейнер отслеживает переменную “loading”, но не могу понять, откуда она берется и как “подключиться” к ней или отслеживать состояние загрузки в своем виджете.
Буду признателен за любые ответы или просто за направление в нужном общем направлении.
@hawm Я не уверен, что перерисовка очереди — это то, что мне нужно здесь, поскольку дело не столько в перерисовке моих виджетов, сколько в том, чтобы мои виджеты понимали, загружает ли глобальное приложение Discourse новую страницу или нет.
Переменная loading поступает из маршрута discovery, о котором я упоминал выше. Виджет, прикрепленный к plugin-outlet, возможно, не сможет получить к ней доступ, так как она не передается в качестве аргумента; это зависит от определения plugin-outlet.
Мне наконец-то удалось найти решение. Я потратил на это о-о-очень много времени, и, на мой взгляд, это стоит включить в ядро, потому что честно говоря, кажется, что такая функция уже должна там быть.
Я добавил код ниже в свой компонент темы; он добавляет класс “loading” к тегу body сразу после начала маршрутизации и удаляет его, как только маршрутизация завершена. Возможно, для тех, кто хорошо знает Ember, это кажется простым и очевидным, но мне потребовалось немыслимо много времени (я перепробовал миллион вещей и прочитал все найденные мной темы на этом форуме), чтобы это понять.
С этим кодом в ядре я могу добавлять индикаторы загрузки и подобные элементы к своим виджетам, при этом их CSS и видимость будут зависеть от того, есть ли у тега body класс loading.