この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

アプリケーションのバブルイベントとキャプチャイベントの処理

イベント伝達ルールにより、コンテインメント階層のどのコンポーネントがデフォルトでバブルフェーズまたはキャプチャフェーズのイベントを処理できるのが決まります。ルールや、バブルフェーズまたはキャプチャフェーズのイベントの処理方法について説明します。

フレームワークでは、アプリケーションイベントの伝達のキャプチャフェーズ、バブルフェーズ、デフォルトフェーズがサポートされます。キャプチャフェーズとバブルフェーズは DOM の処理パターンと似ており、対象のコンポーネントがイベントに対応したり、場合によっては後続のハンドラの動作を制御したりできます。デフォルトフェーズでは、フレームワークの元の処理動作が保持されます。

デフォルトのイベント伝達ルール

デフォルトでは、コンテインメント階層のすべての親がキャプチャフェーズおよびバブルフェーズでイベントを処理できるわけではありません。代わりに、イベントはコンテインメント階層のすべての所有者に伝達されます。

コンポーネントの所有者は、その作成を行うコンポーネントです。宣言的に作成されたコンポーネントの場合、所有者はイベントの起動コンポーネントを参照するマークアップが含まれる、最も外側のコンポーネントになります。プログラムで作成されたコンポーネントの場合、所有者コンポーネントはそのコンポーネントを作成するために $A.createComponent を呼び出したコンポーネントになります。

イベント伝達の方向 (下) はバブルフェーズ (上) と反対になりますが、キャプチャフェーズにも同じルールが適用されます。

わかりやすく、バブルフェーズの例を使用して説明します。

c:owner には c:container が含まれ、さらにそこには c:eventSource が含まれます。

c:eventSource がイベントを起動すると、このコンポーネント自体がイベントを処理します。次に、イベントはコンテインメント階層をバブルアップします。

c:container には c:eventSource が含まれますが、マークアップの最も外側のコンポーネントではないことが原因で所有者にはならないため、バブルイベントを処理できません。

c:owner は、c:container がそのマークアップ内にあるため、所有者です。c:owner はイベントを処理できます。

すべてのコンテナコンポーネントへの伝達

デフォルトの動作では、コンテインメント階層内のすべての親がイベントを処理できるわけではありません。他のコンポーネントが含まれているが、それらのコンポーネントの所有者ではないコンポーネントがあります。これらのコンポーネントは、コンテナコンポーネントと呼ばれます。この例の c:container は、c:eventSource の所有者でないため、コンテナコンポーネントになります。デフォルトでは、c:containerc:eventSource が起動したイベントを処理できません。

コンテナコンポーネントには、Aura.Component[] 型のファセット属性 (デフォルトの body 属性など) があります。コンテナコンポーネントには、定義で {!v.body} などの式が使用されているコンポーネントが含まれます。コンテナコンポーネントは、その式で表されるコンポーネントの所有者ではありません。

コンテナコンポーネントでイベントを処理できるようにするには、コンテナコンポーネントの <aura:handler> タグに includeFacets="true" を追加します。たとえば、includeFacets="true" をコンテナコンポーネント c:container のハンドラに追加すると、c:eventSource からバブルされたコンポーネントイベントを処理できるようになります。

バブルイベントを処理する

バブルフェーズのハンドラを追加するには、phase="bubble" を設定します。

event 属性では、処理するイベントを指定します。形式は namespace:eventName です。

<aura:handler>action 属性は、イベントを処理するクライアント側コントローラのアクションを設定します。

キャプチャイベントを処理する

キャプチャフェーズのハンドラを追加するには、phase="capture" をせていします。

イベント伝達を停止する

他のコンポーネントへのイベント伝達を停止するには、Event オブジェクトの stopPropagation() メソッドを使用します。

非同期コード実行のイベント伝達を一時停止する

event.pause() を使用して、event.resume() がコールされるまでイベントの処理と伝達を一時停止します。このフロー制御メカニズムは、非同期コードの実行からの応答に基づいて決定を行う場合に便利です。たとえば、ネイティブモバイルコードに対する非同期コールからの応答に基づいてイベント伝達に関する決定を行うことができます。

pause()resume() は、キャプチャフェーズまたはバブルフェーズでコールできます。