ステップ 6: アプリケーションとイベントをインタラクティブにする
イベントを起動して親コンポーネントのイベントを処理するには、まずイベントとそのハンドラを作成します。
- をクリックします。
- [New Event (新規イベント)] ウィンドウで、「updateExpenseItem」と入力します。これにより、updateExpenseItem.evt という新しいイベントが作成されます。
-
updateExpenseItem.evt で、次のコードを入力します。
イベントで定義している属性が、起動元のコンポーネントからハンドラに渡されます。
1swfobject.registerObject("clippy.codeblock-0", "9"); 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<aura:event type="APPLICATION"> 18 <!-- If you’re using a namespace, use myNamespace.Expense__c instead. --> 19 <aura:attribute name="expense" type="Expense__c"/> 20</aura:event>フレームワークには、コンポーネントイベントとアプリケーションイベントという 2 種類のイベントがあります。ここでは、アプリケーションイベントを使用します。アプリケーションイベントが起動されると、ハンドラに通知されます。この場合は、form.cmp に通知されて、イベントが処理されます。
expenseList.cmp には、change="{!c.update}" で示されるクライアント側のコントローラアクションに接続されるチェックボックスが含まれていることを思い出してください。次に、update アクションを設定します。
-
expenseList サイドバーで、[CONTROLLER] をクリックします。これにより、expenseListController.js という新しいリソースが作成されます。次のコードを入力します。
1swfobject.registerObject("clippy.codeblock-1", "9"); 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17({ 18 update: function(component, evt, helper) { 19 var expense = component.get("v.expense"); 20 //If you’re using a namespace, use e.myNamespace:updateExpenseItem instead 21 var updateEvent = $A.get("e.c:updateExpenseItem"); 22 updateEvent.setParams({ "expense": expense }).fire(); 23 } 24})チェックボックスをオンまたはオフにすると、update アクションが実行され、reimbursed パラメータの値が true または false に設定されます。updateExpenseItem.evt イベントは、更新済みの expense オブジェクトを使用して起動されます。
-
ハンドラコンポーネント form.cmp で、次のハンドラコードを <aura:attribute> タグの前に追加します。
1swfobject.registerObject("clippy.codeblock-2", "9"); 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<!-- If you’re using a namespace, use myNamespace:updateExpenseItem instead --> 18<aura:handler event="c:updateExpenseItem" action="{!c.updateEvent}" />このイベントハンドラは、作成したアプリケーションイベントが起動されると updateEvent アクションを実行します。
-
イベントを処理するための updateEvent アクションを結び付けます。formController.js で、次のコードを createExpense コントローラアクションの後に入力します。
1swfobject.registerObject("clippy.codeblock-3", "9"); 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17updateEvent : function(component, event, helper) { 18 helper.upsertExpense(component, event.getParam("expense")); 19}このアクションは、ヘルパー関数をコールし、{ Name : "Lunch" , Client__c : "ABC Co." , Reimbursed__c : true , CreatedDate : "2014-08-12T20:53:09.000Z" , Amount__c : 20} 形式のパラメータと値が含まれた経費オブジェクトを含む event.getParam("expense") を渡します。
中級編
ライフサイクルの表示中には、このチュートリアルで使用した init イベントなどのいくつかのイベントがフレームワークによって起動されます。たとえば、サーバ応答をクライアントが待機しているときや、応答を受信したことを示すために doneWaiting イベントが起動されたときに、waiting イベント実行中のアプリケーションの動作をカスタマイズすることもできます。次の例に、waiting イベント実行中にアプリケーションでテキストを追加する方法と、doneWaiting イベントの起動時にテキストを削除する方法を示します。
1<!-- form.cmp markup -->
2<aura:handler event="aura:waiting" action="{!c.waiting}"/>
3<aura:handler event="aura:doneWaiting" action="{!c.doneWaiting}"/>
4<aura:attribute name="wait" type="String"/>
5
6<div class="wait">
7 {!v.wait}
8</div>1/** formController.js **/
2waiting : function(component, event, helper) {
3 component.set("v.wait", "updating...");
4},
5doneWaiting : function(component, event, helper) {
6 component.set("v.wait", "");
7}新しいレコードを作成するために [送信] ボタンをクリックするか、経費項目のチェックボックスをオンにすると、このテキストがアプリケーションによって表示されます。詳細は、「表示ライフサイクル中に起動されたイベント 」 を参照してください。