«Компонент был создан с использованием gjs», но это не так

На стабильной версии 3.4.1.

У меня в плагине есть:

/assets/javascripts/discourse/controllers/user-feedback.js

а затем
/assets/javascripts/discourse/templates/user-feedback.hbs содержит

{{feedback-stream stream=this.model}}

А также эти файлы:

/assets/javascripts/discourse/components/feedback-stream.js
/assets/javascripts/discourse/templates/components/feedback-stream.hbs

Вот ошибка, которую я получаю в консоли браузера.

/discourse/templates/components/feedback-stream] Компонент feedback-stream был написан с использованием gjs, и его шаблон не может быть переопределён. Переопределение игнорируется. Подробнее о будущем переопределения шаблонов см. по адресу https://meta.discourse.org/t/247487 Но, как вы видите, он не был написан с использованием gjs.

Теперь я решил пока игнорировать эту ошибку и продолжил модернизацию плагина. Как только я переместил шаблоны в одну папку с компонентами (то есть выполнил mv templates/components/* components), ошибка исчезла. Однако шаблон всё ещё игнорируется.

Хорошо, кажется, части пазла начинают сходиться.

Компонент объявлен так:

export default class FeedbackStream extends UserStream {

а UserStream написан с использованием gjs.

Оставив в стороне некорректное сообщение об ошибке, как мне модернизировать это и вернуть всё к рабочему состоянию?

Какова цель ваших изменений? Чтобы мы могли понять контекст.

Полагаю, с gjs вы можете полагаться только на плагины. :thinking:

Цель моих текущих изменений — вернуть работоспособность плагина на последней стабильной версии :slight_smile:

Цель этой конкретной части плагина — отображать обратную связь на странице профиля пользователя, активно переиспользуя существующие компоненты.

Если вы используете gjs для вашего FeedbackStream, то, думаю, это должно сработать. Тогда это будет выглядеть примерно так:

export default class FeedbackStream extends UserStream {
  <template>
    Ваша собственная разметка здесь 
  </template>
}

Я думаю, что смешивание hbs и gjs в одной цепочке наследования компонентов вряд ли будет работать хорошо.

Кстати, @Arkshine, я вижу ваш :exploding_head: — поэтому просто уточню здесь. Переопределение шаблонов устарело, независимо от исходного формата авторства. Мы полностью удалим их в ближайшие несколько месяцев. В таких случаях вы абсолютно правы: решением являются плагины (Plugin Outlets).

Однако то, что делает @RGJ здесь, не является переопределением шаблона — он использует систему наследования компонентов Ember. Вместо того чтобы писать

class Foo extends Component

можно написать

class Foo extends SomeOtherComponent

В этом случае ваш компонент унаследует шаблон SomeOtherComponent, либо вы сможете заменить его самостоятельно. Ваше переопределение шаблона применяется только к Foo и не влияет на родительский компонент SomeOtherComponent.

Однако такой вид наследования используется довольно редко. Мы склоняемся к «композиции», когда компоненты оборачивают друг друга внутри шаблона. (Например, именно так используется DModal)

А, теперь понятно, спасибо за разъяснение! Я не сразу увидел наследование здесь. Всё логично.

Спасибо за быструю помощь и понятное объяснение, Дэвид!