Isso é inesperado, especialmente porque eu não estou realmente “mudando nada” (ainda)?
Consigo reproduzir este problema mesmo que esta seja a única modificação.
Em última análise, a razão pela qual estou tentando mudar isso é para forçar uma reavaliação deste template, mesmo que eu não esteja entrando ou saindo de uma rota de tópico.
Em última análise, quero adicionar lógica para que o widget seja forçado a atualizar ao entrar e sair de rotas de categoria, porque a apresentação da minha rota de categoria precisa ser diferente.
Portanto, uma solução para isso pode ser outra maneira de forçar a atualização do conteúdo do cabeçalho.
Em qualquer caso, isso não parece estar se comportando como eu deveria esperar?
Não queremos investir muito tempo aqui - os widgets não vão durar muito mais tempo. Que personalização você está tentando fazer? Podemos ajudar adicionando um ponto de saída de plugin em algum lugar (agora temos a capacidade de adicionar pontos de saída de plugin normais dentro do código do widget).
Você pode compartilhar mais do seu arquivo (por exemplo, de onde hbs está sendo importado?)
Funcionalmente, estou tentando trocar o logotipo dependendo da rota. Na realidade, estou fazendo isso anexando uma imagem ao logotipo inicial em algumas rotas e sobrepondo o logotipo principal. Quero que essa lógica seja reavaliada ao mudar de rota, o que atualmente parece funcionar ao entrar e sair das rotas do Tópico, suponho que porque o widget header-contents ao qual tudo está anexado tem lógica avaliando os attrs.topic, que obviamente muda quando isso ocorre.
O que funciona bem, mas não está sendo reavaliado entre certas transições de rota, portanto, não está cumprindo o requisito de ser totalmente dinâmico sem uma recarga de página.
Ooooops, este pode ser o problema, eu tinha a sensação de que poderia ser, mas meus testes foram obviamente muito superficiais para descartar isso.
Este é provavelmente o problema. Os ‘templates’ de Widget são uma coisa personalizada do Discourse e são compilados de uma maneira totalmente diferente dos templates do Ember. Você precisará importar hbs assim:
Parece que temos um site-header:force-refresh appEvent que você poderia acionar em resposta a algum outro appEvent ou evento do roteador Ember:
Ótimo, obrigado David, vou corrigir a instalação desatualizada e tentar suas recomendações aqui também. Acúmulo múltiplo, obrigado por ajudar a esclarecer!
aliás, só uma nota paralela aqui, embora a API de widgets seja toda muito personalizada e um tanto complicada (especialmente as coisas do hyperscript), devo admitir que é extremamente poderosa para anexar novos comportamentos a widgets existentes sem ter que substituir muito código.
por exemplo, usei muito este padrão:
api.reopenWidget('discourse-awesome-widget', {
html(attrs, state) {
let contents = this._super(...arguments);
contents.unshift(h("div.my-cool-new-thing", "cool new thing"))
return contents;
}
});
this._super poderia ser muito código!!!
E pode ficar muito mais inteligente do que isso, a ponto de eu ter passado a apreciá-lo muito.
Espero que a “capacidade de substituição” do que quer que o substitua seja igualmente flexível e poderosa.
A principal solução aqui serão os “plugin outlets”. Como sempre, se você sentir que precisa de um que não existe, sinta-se à vontade para fazer um PR para o core