イベントハンドラの動的な追加
コンポーネントから起動されるイベントのハンドラを動的に追加できます。コンポーネントは、クライアント側で動的に作成することも、実行時にサーバから取得することもできます。
次のサンプルコードでは、イベントハンドラを c:sampleComponent のインスタンスに追加します。
1addNewHandler : function(cmp, event) {
2 var cmpArr = cmp.find({ instancesOf : "c:sampleComponent" });
3 for (var i = 0; i < cmpArr.length; i++) {
4 var outputCmpArr = cmpArr[i];
5 outputCmpArr.addHandler("cmpEvent", cmp, "c.someAction");
6 }
7}イベントハンドラをコンポーネントに追加する addHandler() メソッドについて説明しましょう。
1outputCmpArr.addHandler("cmpEvent", cmp, "c.someAction");- cmpEvent — 最初の引数は、ハンドラをトリガするイベントの名前です。コンポーネントから起動しないイベントの起動開始をコンポーネントに強制することはできないため、コンポーネントから起動するイベントに、この引数が対応することを確認してください。コンポーネントのマークアップの <aura:registerEvent> タグにより、コンポーネントから起動するイベントが公開されます。いずれかの <aura:registerEvent> タグの name 属性と一致するように、この引数を設定してください。
- cmp — 第 2 引数は、アクション式 (次の引数) を解決する値プロバイダです。この例の値プロバイダは、コントローラに関連付けられているコンポーネントです。
- c.someAction — 第 3 引数は、イベントを処理するコントローラアクションです。ハンドラをマークアップで静的に定義した場合、<aura:handler> タグの action 属性に指定する値に相当します。
メソッドおよび引数の完全なリストについては、ドキュメント参照アプリケーションの JavaScript API を参照してください。
$A.createComponent() のコールバック関数で動的に作成されたコンポーネントにイベントハンドラを追加することもできます。詳細は、「コンポーネントの動的な作成」を参照してください。