2016-12-19 6 views
2

私はEmber.jsの新人です。私はその理念を理解するためにいくつかの問題を抱えています。私はアクションをアップ、データダウンを知っているが、実際の生活では、私はFotoramaが私のギャラリーのコンポーネントで初期化されていると言うことができます(私はそれが大丈夫ですかわからないが、私はdidInsertElementメソッドでそれをやった)。このライブラリには独自のイベントがあります。ember.jsコンポーネントのカスタムイベントを処理する方法は?

$('.fotorama').on('fotorama:ready', function (e, fotorama) {}); 

か:彼らは平野JSでこのようになります。

$('.fotorama').on('fotorama:show', function() {}); 

を私はエンバーに、それらは何とかコンポーネント内のアクションにマップする必要があります感じています。 私の質問は:どのようにですか?私はこれらのアクション内でいくつかのアクション(別のコンポーネントやルータによってキャッチされる)を起動する必要があります。だから私はそれがこのようにすべきだと思う:this.sendAction('actionName', actionParams);

答えて

3

あなたはsendActionメソッドを呼び出すためのコンポーネント参照を保持することができます。

didInsertElement(){ 
this._super(...arguments); 
var _this=this; 
this.$('.fotorama').on('fotorama:show', function() { 
    _this.sendAction('actionName', actionParams); 
}); 
} 
willDestroyElement(){ 
this._super(...arguments); 
this.$('.fotorama').off('fotorama:show') 
} 

この質問に対して、より良い回答が見つかった場合は、私は喜んで私の答えを取り除きます。

+0

あなたはドキュメントや詳細情報を提供できますか?なぜこのアプローチはお勧めできませんか? – ykaragol

+1

_didInsertElement()は、イベントリスナーをアタッチするのにも適しています。これは、カスタムイベントや、組み込みのイベントハンドラを持たない他のブラウザイベントに特に便利です._ [ember guide](https://guides.emberjs.com/v2.10.0/components/the-component-lifecycle)の[ /#toc_integrating-with-third-party-libraries-with-code-didinsertelement-code) – ykaragol

+2

私は通常jqueryプラグインを扱うときにこのようなコードを書いています。しかし、jqueryプラグインの大部分はemberとうまくやられないというemberの人々の周りの概念があります。私たちはそれを私たち自身で書く必要があります...私は単純に、推奨されていないアプローチを追加して、より多くの投票権を得ないようにしました。 @locksは私たちを啓発するかもしれません。 – kumkanillam

関連する問題