Como reexecutar scripts em componentes de tema

Os scripts nos componentes do tema são executados apenas uma vez; como reexecutá-los ao alterar a rota (sem recarregar a página inteira)?

Por exemplo, quero que os scripts em um componente sejam executados mesmo após navegar entre as abas.

1 curtida
<script type="text/discourse-plugin" version="0.8">
    api.onPageChange(() => {
        // seu código
    });
</script>
6 curtidas

Onde eu colocaria isso se estou construindo um componente de tema? Este é o meu código no momento. Estou tentando re-renderizar o rodapé toda vez que houver uma mudança de rota para que os scripts sejam executados novamente.

Estou recebendo erros estranhos.

Sou um total iniciante e não sei se essa é a maneira correta de fazer isso.

    initialize() {
      withPluginApi("0.8", api => {
        if (settings.Show_footer_on_login_required_page) {
          api.modifyClass("controller:static", {
            @on("init")
            showFooterOnStatic() {
              this.set("application.showFooter", true);
            }
        });

        api.onPageChange(() => {
          showFooterOnStatic() {
            this.set("application.showFooter", true);
          }
        });
      }
    });
1 curtida

Você já tentou olhar para arte/trabalho/código anterior em outro #theme-component semelhante para obter algumas ideias sobre como proceder?

1 curtida

Já vi alguns, mas eles não parecem ter o que estou tentando fazer. Acho que vou procurar mais componentes de tema.

1 curtida

Obrigado, @osioke, e @michaeld :raised_hands:, encontrei exatamente o que eu estava procurando depois de examinar este componente de tema: Homepage Feature

https://github.com/discourse/discourse-homepage-feature-component/blob/main/javascripts/homepage-featured-topics/connectors/above-main-container/homepage-featured-topics.js.es6

4 curtidas