【问题标题】:I'm getting this.get() is undefined in ember我得到 this.get() 在 ember 中未定义
【发布时间】: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


【解决方案1】:

我想通了。这是因为我绑定了this.actions 并且 get 没有在 actions 属性上定义,我猜。当我改为创建一个名为切换和绑定this 的方法时,它反而起作用了。感谢您的帮助!

【讨论】:

  • 通常这就是为什么我建议始终使用Ember.get(target, 'name') 而不是target.get('name')
  • 也许that
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多