我有一个音频播放器Ember.js组件,我想从任何地方发送事件:
this.get('audioPlayer').send('play');
要访问组件,我将组件设置为自身的属性,将其公开给控制器(link)。
这在Ember 1.13-beta中停止工作,我认为我一定做错了。数据下降,操作和所有。
您如何使用全球音频播放器构建应用程序?
你会如何对组件发送动作? (或者有更好的方法吗?)
答案 0 :(得分:1)
我设法让它像1.13一样工作:http://jsbin.com/serunaxozi/1/edit
唯一的变化是修改_register
方法,如下所示:
_register: function() {
this.get('attrs.register-as.update')(this);
}.on('init')
1.13正在改变组件引用属性的方式。通过attrs
对象访问组件上的属性,以将它们与组件变量区分开来。它们还具有value
和update
属性,可通过mut
关键字进行双向绑定的隐式单向绑定。
请记住,这仍然在进行中,所以现在我们需要从属性中手动获取update
方法并调用它,但我想在将来这将使用setter如下:
this.set('attrs.register-as', this);
还要记住,最终组件将与尖括号一起使用,您需要明确指出属性是Ember的双向绑定,以生成该更新方法:
<audio-player title="Michael Jackson" test={{test}} register-as={{mut audioPlayer}} />
目前这仍然是一个小错误(使用尖括号语法,attrs
在与on('init')
一起运行的方法中不可用。{/ p>
- 编辑 -
将来init
内的属性将无法使用,而是会有另一个钩子didInitAttrs
。请参阅https://github.com/emberjs/ember.js/issues/11200。