Como uso imagens de assets no HTML de um componente de tema baseado em Glimmer?

Include assets (e.g. images, fonts) in themes and components ainda parece se referir à maneira Handlebars de fazer as coisas, se estou entendendo corretamente. A nova maneira Glimmer já está disponível para tornar as imagens do diretório assets do componente de tema utilizáveis em um HTML(-template) do mesmo componente de tema?

Meu caso de uso é substituir o componente de tema legado agora quebrado descrito em Templating of my "component" broke. How do I fix it?.

O que eu tentei

Eu gerei um novo projeto de componente de tema com discourse_theme new discourse-tc-geowebforum-sponsors e então tentei replicar o plugin anterior sem a lógica condicional e com um template embutido, mas isso levou a

[THEME 6 'geowebforum-sponsors'] Error: [THEME 6 'geowebforum-sponsors'] Compile error: SyntaxError: /theme-6/discourse/api-initializers/geowebforum-sponsors.gjs: Attempted to resolve a helper in a strict mode template, but that value was not in scope: theme-relative-url: 

no console do navegador.

Eu também tentei várias combinações de:

  • retirar o template para uma constante
  • chaves curly simples (em vez de duplas)
  • usar uma chamada de função (themeRelativeUrl("asseco_berit.jpg")) dentro das chaves curly
  • mover o template para javascripts/discourse/components/geowebforum-sponsors.gjs (e importá-lo do inicializador)
  • mover o template para javascripts/components/geowebforum-sponsors.gjs (e importá-lo do inicializador)
  • introduzir uma class GEOWebforumSponsorsComponent extends Component {} nesse arquivo e importá-la no inicializador (enquanto exporta o template do mesmo arquivo como a classe sob o nome template, como um LLM havia me sugerido – ainda não tenho certeza se isso faria algum sentido.)

Eu obtive ou

  • o mesmo erro (embora daquele outro arquivo)
    ou
  • klass is not an Ember component
    ou
  • placeholders de template literais no DOM resultante, levando naturalmente a 404s nas fontes das imagens
1 curtida

Hmm, você viu esta parte?