2017-02-17 8 views
5

私は2つのコンポーネントと1つは別のコンポーネントに座っています。私はそれを行うための任意の標準的な方法がある私に知らせてくださいEmberのコンポーネントがルートにアクションを送信します

enter image description here(両方のコンポーネントが同じルートで使用)子コンポーネントからメインルートにイベントを送信する必要があります。

答えて

13

短い答えとして、ember-route-action-helperアドオンを使用できます。

<button {{action (route-action 'onButtonClick')}}>ClickToCallRouteAction</button> 

は、上から下に文字列として関数名を渡し、アクション通信の三方、

1.オールド・スタイルの古典的な機能のスタイルすなわちあります。すべての場所で同じ機能を定義して提供する必要があります。泡立てるにはsendActionを使用してください。 sendメソッドは、コントローラからルート階層にバブルします。

これはお勧めしません。 サンプル古典的なスタイルactions twiddle

2.閉鎖アクションだけではなく、文字列の 使用actionヘルパーパス機能。どこにでも定義する必要はありません。 sample twiddle for closure actionsスタイル

3. route-action-helper addon あなたが直接route-actionヘルパーを使用してちょうどラップ機能により、どこでも文字通りからのルートアクションを呼び出すことができます。クラシックスタイルと閉鎖のスタイルとなぜ閉鎖の間

Sample twiddle

比較ですがpreferrableありますか?

  • は、古典的なスタイルで、あなたは各レベルでアクションを定義し、あなたのネスティングのうち、すべての方法を持ってまで、各レベルでのアクションをトリガーするsendActionを使用する必要があります。
  • クロージャーアクションで値を返すことはできますが、古典的なアクションでは値を返すことはできません。
  • クロージャーアクションでは値をカリーリングできますが、古典的なアクションではカリングできません。
  • アクションが見つからない場合、クロージャアクションはすぐに失敗します。しかし、古典的なアクションは、設計時には の値を呼び出すとエラーが発生しやすくなります。
  • 誰がアクションを処理し、ビジネスロジックを行うような複雑なコードを記述しますか。
  • クロージャでは、actionとmutヘルパーを組み合わせて、値でプロパティを設定できます。 onclick=(action (mut title) value="titlevalue")
  • クロージャでは、関数を呼び出すターゲットオブジェクトを指定できます。 (action 'save' target=session)は、現在のコンテキストの代わりにsessionオブジェクトのactionsハッシュを調べます。

このに関する有望な記事の一部、
- miguelcambaの記事ember-closure-actions-in-depth
- emberigniterの記事send-closure-actions-up-data-owner
- 造船所 - - ember-best-practice-stop-bubbling-and-use-closure-actions
- ブログ1.13 release article
emberjsブログエンバーマップWhy action helper?
から - Alisdair McDiarmidのブログember-closure-actions-have-return-values
- alexdilibertoからのブログember-closure-actions

+0

なぜ*旧式の古典的な機能のスタイル*は奨励されていませんか? (1)と(2)の違いをもっと詳しく説明できますか? –

+1

@LiXinyang差異が更新され、クロージャーが推奨されている理由といい記事があります。 – kumkanillam

+0

お時間をありがとう@kumkanillam。アップアップされました! +10これらの参考資料は全て偉大なものです –

関連する問題