Tenho a sensação de que estou provavelmente perdendo algo óbvio aqui, mas não consigo descobrir. Tenho um componente de tema que carrega alguns widgets e estou usando o seguinte código para re-renderizá-los após o usuário navegar para uma nova página (adotado dos banners de categoria):
No entanto, esse código espera até que a nova página tenha carregado para atualizar o widget. O que eu espero fazer é ocultar o conteúdo do meu widget assim que alguém clicar em um link para outra página, de forma semelhante à funcionalidade nativa do Discourse, que oculta elementos e mostra um spinner de carregamento imediatamente ao clicar.
Vejo em app\assets\javascripts\discourse\app\templates\discovery.hbs que o container div observa uma variável “loading”, mas não consigo descobrir de onde ela vem e como “conectar-me” a ela ou observar o estado de carregamento no meu widget.
Agradeço qualquer resposta ou simplesmente uma indicação na direção geral correta.
@hawm Não tenho certeza de que a re-renderização da fila é o que preciso aqui, pois isso não se trata realmente de re-renderizar meus widgets, mas sim de dar aos meus widgets a consciência de se o aplicativo global do Discourse está carregando uma nova página ou não.
Sim, claro. Não estou com dificuldades com a sintaxe if/then; o que estou perguntando é se existe uma maneira de verificar se o Discourse está carregando uma nova página no momento.
A variável loading vem da rota discovery que mencionei acima. O widget anexado ao plugin-outlet pode não conseguir acessá-la, já que ela não é passada como argumento; isso depende da definição do plugin-outlet.
Consegui finalmente encontrar uma solução. Demorei muuuuuuuuito com isso e, na minha opinião, vale a pena mesclar no núcleo, porque, honestamente, parece que já deveria existir no núcleo de qualquer forma.
Adicionei o código abaixo ao meu componente de tema; o que ele faz é adicionar uma classe “loading” ao body assim que o roteamento começa e removê-la assim que o roteamento é concluído. Talvez isso seja simples/óbvio para quem conhece o Ember, mas levou-me um tempo obscenamente longo (e tentar um milhão de coisas + ler todos os tópicos que consegui encontrar aqui) para descobrir.
Com esse código do núcleo em vigor, posso adicionar spinners de carregamento e afins aos meus diferentes widgets, que terão seu CSS e visibilidade controlados pela presença ou não da classe CSS loading na tag body.