Ссылка Include assets (e.g. images, fonts) in themes and components, похоже, всё ещё описывает подход с использованием Handlebars, если я правильно понимаю. Доступен ли уже новый подход Glimmer для получения изображений из директории assets компонента темы, чтобы использовать их в HTML-шаблоне того же компонента темы?
[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:
Также я пробовал различные комбинации:
вынесение шаблона в константу
использование одиночных (вместо двойных) фигурных скобок
вызов функции (themeRelativeUrl("asseco_berit.jpg")) внутри фигурных скобок
перемещение шаблона в javascripts/discourse/components/geowebforum-sponsors.gjs (и импорт его из инициализатора)
перемещение шаблона в javascripts/components/geowebforum-sponsors.gjs (и импорт его из инициализатора)
создание класса class GEOWebforumSponsorsComponent extends Component {} в этом файле и его импорт в инициализаторе (при этом экспорт шаблона из того же файла, что и класс, под именем template, как мне предложил LLM — я всё ещё не уверен, имеет ли это какой-либо смысл).
В результате я либо получал
ту же ошибку (хотя и из другого файла)
или
klass is not an Ember component
или
буквальное отображение плейсхолдеров шаблона в результирующем DOM, что, естественно, приводило к ошибкам 404 для источников изображений.
Основные сложности, с которыми я столкнулся на этом пути:
В шаблонах ни произвольные выражения JavaScript (например, вызовы функций), ни выражения с фильтрами (вида some-transormation-function someVariableOrLiteral) не работают внутри двойных фигурных скобок. Там можно интерполировать только одиночные переменные.
Для одного из двух ресурсов я забыл включить имя директории assets/ в соответствующее значение пути к файлу в about.json. Это привело к тихой ошибке: соответствующая настройка стала undefined, что, видимо, вызвало полное игнорирование шаблона или что-то подобное.
На одном из этапов разработки компонент темы, синхронизируемый через discourse_theme watch ..., не оказывал никакого эффекта — ни в предпросмотре, ни при явной активации. Решение нашлось, когда я позволил discourse_theme watch ... создать новую копию компонента на инстансе (удалив предыдущую копию). Точно не знаю, что именно там произошло.
Вы проверили консоль браузера? Ошибки в вашем компоненте отображаются там, и если они есть, ваш компонент не будет отображаться (или будет отображаться не полностью).