Позвольте мне попытаться объяснить это немного. В основном, в ember есть 4 вида компонентов.
без .js
файла :
При вызове компонента ember сначала ищет класс компонента. Когда он не находит такой класс, поведение зависит от дополнительной функции template-only-glimmer-components
. По умолчанию это включено для новых октановых приложений.
Если оно включено , то ember будет искать шаблон компонента на основе некоторых стандартных правил и использовать его, но будет нет класс поддержки. Это довольно мило. Это также в основном то, что вы получаете в приложении с октановым числом, когда вы делаете ember g component my-component
.
Когда template-only-glimmer-components
отключен, тогда класс компонента неявный classi c будет автоматически создан и используется вместе с правильным шаблоном. Вы не хотите этого поведения. Если он у вас есть, вы можете перейти от него: 1) создать файл .js
для каждого компонента и затем 2) включить template-only-glimmer-components
.
с файлом .js
.
При обнаружении файла js
ember получит default
экспорт этого модуля. Затем он найдет правильный менеджер компонентов. На самом деле это зависит от этого экспорта: setComponentManager
должен был быть вызван для него. Обычно это делается в базовом классе как @ember/component
или @glimmer/component
. Но вы можете также написать свой собственный менеджер компонентов.
По сути, ember также будет искать шаблон на основе этого компонента. Публичный c API для этого предлагается в this RF C, но в настоящее время частный API используется для так называемого шаблона совместного размещения , где вы размещаете свой .hbs
файл рядом с вашим .js
файлом с тем же именем и просто другим расширением. Это значение по умолчанию в октанте. Здесь ember внутренний шаг сборки в ember-cli
в основном добавляет ваш шаблон в файл .js
и использует этот API. Вы также можете увидеть результат в отладчике браузера. Поэтому при отсутствии экспорта по умолчанию ember не может найти ваш шаблон.