动态确定是否存在仅模板的Ember glimmer组件?

r7xajy2e  于 2022-10-20  发布在  其他
关注(0)|答案(1)|浏览(110)

我知道,要动态确定Ember上组件的存在,我们可以使用herehere解释的解决方案。
我们有一个使用.hasRegistration('component:${component}')的助手
只要定义了.js文件,这也适用于Glimmer组件,但它不适用于仅模板的Glimmer组件。在这种情况下,组件似乎没有注册。
有人知道一个解决方案,它也适用于只使用模板的微光组件吗?

dsekswqp

dsekswqp1#

我在stackblitz上为你做了一个演示:
https://stackblitz.com/edit/github-k7htnb?file=app%2Fcomponents%2Fdemo.hbs

{
  "component:template-only": true,
  "template:template-only": false
}

下面的代码显示了您在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}`),
    };
  }
}

现在,如果我将ember源更改为3.26.1,它是相同的。
也许你正在做的和这个演示正在做的之间有一点代码不匹配?

相关问题