2015-04-06 40 views
1

我的目标是解决通用组件是组件不存在。它成功地做到这一点是这样的:EmberJS:如何检查组件是否存在(在另一个组件中)?

// app/components/dynamic-widget.js 
    ... 
    widgetName: function() { 
    var name = this.get('config.name'); 
    if (!this.container.resolve('component:'+name)) { 
     name = 'generic-widget'; 
    } 
    return name; 
    }.property('config.name') 
    ... 

然后在app/templates/components/dynamic-widget.hbs

{{component widgetName}} 

然后,我可以用我的dynamic-component这样的:

{{dynamic-widget 'foo-widget'}} 

如果foo-widget没有实现,它回退到generic-widget

但由于EmberJS 1.11,解决从组件的容器组件被弃用:

DEPRECATION: resolve should be called on the registry instead of the container 

所以我的问题是,我怎么能检查,如果不使用this.container.resolve实际存在的一个组成部分?

非常感谢。

+1

你找到一个解决办法? – 2015-04-28 15:01:26

回答

0

this.container.registery.resolve是否工作?

Git中的代码看https://github.com/emberjs/ember.js/blob/5fd2d035b30aa9ebfe73de824b3b283ec8e589cc/packages/container/lib/registry.js

看起来你也能够使用this.container.registery.has

+0

感谢您的支持,但在组件中,this.container.registry未定义:'TypeError:无法读取属性'具有'未定义的...我也尝试直接从组件访问注册表('this.registry ')没有运气... – Namlook 2015-04-07 07:11:51

+0

看起来像是this.container._registry。可能值得在github上用ember提出一个问题,让他们澄清弃用警告。 – varblob 2015-04-07 11:42:13

相关问题