2016-05-14 13 views
1

私はアプリケーション全体でいくつかのUIイベントをトリガーできるようにイベントバスを作成しようとしています。 http://emberigniter.com/communication-between-distant-components/私はthis.get()がemberで定義されていません

イベントバスをサービスとしてuiというコンポーネントプロパティにロードしますが、何らかの理由でこのエラーが発生します:TypeError: this.get(...) is undefinedこれは正しくなければならないので、それは間違いです。 didInsertElementのinitまたはそれ以降のコードで同じエラーを実行するかどうかは関係ありません。私に何ができる?

// 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'); 
    } 
    } 
}); 
+0

あなたのコンポーネントに 'Ember.Evented'を混ぜる必要はありません。それがなぜあなたが見ているエラーの原因になるのか分かりませんが、それを削除することは試してみる価値があります。 –

+1

'init'を無効にする代わりに' .on( 'init') 'を使ってみてください。 – rollingBalls

+0

@rollingBallsは非常に貧弱ですが、lifecycleフックには 'on'を使用しないでください。 OPのように、それらをオーバーライドしてsuperを呼び出す必要があります。 – locks

答えて

1

私はそれを理解しました。 this.actionsをバインドしていて、getがactionsプロパティに定義されていなかったからです。代わりに、トグルと呼ばれるメソッドを作成して、代わりにthisをバインドしました。助けてくれてありがとう!

+1

一般に、 'target.get( 'name')'の代わりに 'Ember.get(target、 'name')'を使うことをお勧めします。 – Lux

+0

@Lux説明できますか?ソースを指すか? – Jeff

+0

[that](http://stackoverflow.com/questions/40606827/difference-between-ember-get-and-this-get/40607558#40607558) – Lux

関連する問題