Вот несколько рекомендаций:
-
Настройки сайта перенесены в сервис:
const siteSettings = container.lookup('service:site-settings'); if (!siteSettings.docuss_enabled) { return; } -
location:discourse-location→location:history -
afterRender().then(() => onAfterRender(container));
afterRender— это декоратор, который размещается над методом в классе компонента; использовать его напрямую как функцию не следует.
Думаю, вам нужно (хотя, возможно, это и не требуется) следующее:import { schedule } from '@ember/runloop'; schedule("afterRender", () => onAfterRender(container)) -
У вас есть большой фрагмент кода вне функции
composeStateChanged, судя по всему.
Также здесь можно использовать сервис маршрутизатора:container.lookup('router:main').transitionTo(path);→this.router.transitionTo(path); -
Заголовок был модернизирован. Кастомизация виджета
home-logoв вашем контексте устарела. Дополнительную информацию см. здесь: Upcoming Header Changes - Preparing Themes and Plugins.
В вашем случае необходимо установить настройкуglimmer header modeв значениеautoилиenabled. Затем вы можете использовать выходной порт плагина для замены содержимого:api.renderInOutlet("home-logo-contents", <template> <HomeLogoContents @logoSmallUrl={{container.dcsHeaderLogo._smallLogoUrl}} @logoUrl={{container.dcsHeaderLogo._logoUrl}} @minimized={{@outletArgs.minimized}} @mobileLogoUrl={{container.dcsHeaderLogo._mobileLogoUrl}} @showMobileLogo={{@outletArgs.showMobileLogo}} @title={{@outletArgs.title}} /> </template>);Примечание: чтобы использовать синтаксис glimmer
<template>, убедитесь, что расширение файла изменено на.gjs.
Также можно использовать этот способ:api.registerValueTransformer("home-logo-image-url", (transformer) => { let url = transformer.value; if (transformer.context.name === 'logo') { url = container.dcsHeaderLogo._logoUrl; } else if (transformer.context.name === 'logo_small') { url = container.dcsHeaderLogo._smallLogoUrl; } else if (transformer.context.name === 'logo_mobile') { url = container.dcsHeaderLogo._mobileLogoUrl; } return url; });Для изменения URL:
api.registerValueTransformer("home-logo-href", () => container.dcsHeaderLogo._href);Примечание: Я полагаю, что код для перерисовки в
setLogoне будет работать с glimmer-компонентом.Примечание после тестирования: Однако ни одно из решений не сработает, так как заголовок рендерится до того, как вы сможете получить логотипы из JSON. У меня пока нет готового решения для этого. Не уверен, есть ли лучший способ: я бы перенес загрузку JSON в сервис и отслеживал результат. Затем используйте выходной порт плагина, описанный выше, с glimmer-компонентом. Таким образом, на основе переменной отслеживания вы сможете автоматически инициировать обновление компонента.
С этим всё вроде как работает. Пока ещё есть неработающие части, например композер. Я не углублялся в это слишком сильно. По крайней мере, больше нет блокирующей ошибки. ![]()
Надеюсь, это поможет.