Sé que para determinar dinámicamente la existencia de un componente en Ember podemos usar las soluciones explicadas aquí o aquí .
Tenemos un asistente que usa .hasRegistration('component:${component}')
Esto también funciona para los componentes de Glimmer, siempre que haya un archivo .js definido, pero no funciona para los componentes de Glimmer solo de plantilla . El componente no parece estar registrado en ese caso.
¿Alguien conoce una solución que también funcione para componentes de brillo solo de plantilla?
Hice una demostración para ti en stackblitz:
https://stackblitz.com/edit/github-k7htnb?file=app%2Fcomponents%2Fdemo.hbs
{ "component:template-only": true, "template:template-only": false }aquí está el código que muestra que lo que estás haciendo funciona en Ember 3.28:
<pre>{{this.format this.results}}</pre> import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import { getOwner } from '@ember/application'; export default class Demo extends Component { format = (data) => JSON.stringify(data, null, 2); @tracked name = 'template-only'; get results() { let owner = getOwner(this); let name = this.name; return { [`component:${name}`]: owner.hasRegistration(`component:${name}`), // added this for curiosity [`template:${name}`]: owner.hasRegistration(`template:${name}`), }; } }Ahora, si cambio el origen de las brasas a 3.26.1, es lo mismo.
¿Tal vez hay una ligera discrepancia de código entre lo que está haciendo y lo que está haciendo esta demostración?