【发布时间】:2016-09-10 15:16:48
【问题描述】:
我正在尝试创建一个事件总线,以便能够在整个应用程序中触发一些 ui 事件。我已按照此处的说明进行操作:http://emberigniter.com/communication-between-distant-components/
我将我的事件总线作为服务加载到名为 ui 的组件属性中,但由于某种原因,我收到此错误:TypeError: this.get(...) is undefined,这很奇怪,因为它应该是,对吧?如果我在 init 中或稍后在 didInsertElement 中运行代码并不重要,同样的错误。我能做什么?
// services/ui.js
import Ember from 'ember';
export default Ember.Service.extend(Ember.Evented);
//components/side-menu.js
import Ember from 'ember';
export default Ember.Component.extend(Ember.Evented, {
ui: Ember.inject.service(),
init() {
this._super(...arguments);
this.get('ui').on('side-menu:toggle', this.actions, 'toggle');
},
actions: {
toggle: function() {
this.$().sidebar('toggle');
}
}
});
【问题讨论】:
-
您不需要将
Ember.Evented混合到您的组件中。不知道为什么这会导致您看到的错误,但删除它值得一试。 -
尝试使用
.on('init')而不是覆盖init。 -
@rollingBalls 非常糟糕的建议,您不应该将
on用于生命周期挂钩。您应该像 OP 一样覆盖它们并调用 super。
标签: javascript events ember.js undefined global