Rerender on new route or transition

I’m building a banner ad plug-in. I have a section of the DOM that I need to re-render each time the page transitions. I have attempted (unsuccessfully) both a Widget and Ember Component, but neither are updating. I loaded them via a Plugin Outlet. I even tried to simplify the problem and dump the current timestamp of the load to the screen (rather than a banner), but only get a re-render if I refresh the browser.

Can someone please point me in the right direction for a solution? I’ve been through the main Discourse developer tutorials, BTW. Just seems like I’m missing something simple.

In which place you are trying to render? In Discourse most of the header UI sections will not refresh across page transactions unlike you hit browser refresh.

And can you post your code to see how you are doing it.

The plugin outlet right above the topic list.

Maybe you can try the following code (not tested):

// My plugin initializer
export default {

	name: 'myPlugin',

	initialize(container) {

		// Reopen the router to add a didTransition hook
		const router = container.lookup('router:main')
		router.reopen({
			doSomething: function() {
				// Wait for rendering to be over. THIS DOESN'T WORK IN ALL CASES. 
				// In fact, there is no way to be sure rendering is complete, because 
				// a 'complete rendering' is meaningless (think about a looping DOM  
				// animation)
				Ember.run.schedule('afterRender', null, () => {
					// Do your stuff here
					...
				})
			}.on('didTransition')
		})

	}

}

Alguém pode dar mais orientações sobre isso?

Você pode explicar o que está tentando alcançar?

Preciso adicionar um componente na área do rodapé e atualizar seu conteúdo a cada carregamento de página quando o usuário visita um tópico. É um carrossel que contém os principais tópicos da nossa comunidade e só é visível na página de tópicos para usuários anônimos. Assim, à medida que o usuário visita cada tópico presente no carrossel, esse slide precisa ser removido do componente. Montá-lo usando a seguinte saída do rodapé não faz o componente ser re-renderizado.

Quando o “footer” é renderizado no Discourse, o aplicativo envia um “evento”

O evento é inserted-custom-html:footer

Você pode usar esse evento para atualizar o conteúdo do seu footer da seguinte forma

api.onAppEvent("inserted-custom-html:footer", () => {
  // adicione seu JS aqui
});

Há alguns detalhes adicionais aqui.

Isso deve funcionar para o que você está tentando alcançar. Se não funcionar, me avise e poste o código que você está usando.

Gostaria de colocar um conteúdo dinâmico no topo da página inicial (somente).

Qual é atualmente a melhor prática para que ele seja renderizado novamente a cada transição de página para a página inicial?

Agradeceria qualquer link para um plugin existente que use isso..