ステップ 6: アプリケーションとイベントをインタラクティブにする
イベントを起動して親コンポーネントのイベントを処理するには、まずイベントとそのハンドラを作成します。
- をクリックします。
- [New Event (新規イベント)] ウィンドウで、「updateExpenseItem」と入力します。これにより、updateExpenseItem.evt という新しいイベントが作成されます。
-
updateExpenseItem.evt で、次のコードを入力します。
イベントで定義している属性が、起動元のコンポーネントからハンドラに渡されます。
1<aura:event type="COMPONENT"> 2 <!-- If you’re using a namespace, use myNamespace.Expense__c instead. --> 3 <aura:attribute name="expense" type="Expense__c"/> 4</aura:event>フレームワークには、コンポーネントイベントとアプリケーションイベントという 2 種類のイベントがあります。コンポーネントイベントを使用します。expenseList.cmp には [Reimbursed? (払い戻し済み?)] チェックボックスが含まれていることを思い出してください。
-
expenseList.cmp を更新して、イベントの起動を登録します。このタグを <aura:attribute> タグの後に追加します。
1<aura:registerEvent name="updateExpense" type="c:updateExpenseItem"/>[Reimbursed? (払い戻し済み?)] チェックボックスは、change="{!c.update}" で示されるクライアント側のコントローラアクションに結び付けられます。次に、update アクションを設定します。
-
expenseList サイドバーで、[CONTROLLER] をクリックします。これにより、expenseListController.js という新しいリソースが作成されます。次のコードを入力します。
1({ 2 update: function(component, evt, helper) { 3 var expense = component.get("v.expense"); 4 // Note that updateExpense matches the name attribute in <aura:registerEvent> 5 var updateEvent = component.getEvent("updateExpense"); 6 updateEvent.setParams({ "expense": expense }).fire(); 7 } 8})チェックボックスをオンまたはオフにすると、update アクションが実行され、reimbursed パラメータの値が true または false に設定されます。updateExpenseItem.evt イベントは、更新済みの expense オブジェクトを使用して起動されます。
-
ハンドラコンポーネント form.cmp で、次のハンドラコードを <aura:attribute> タグの前に追加します。
1<aura:handler name="updateExpense" event="c:updateExpenseItem" action="{!c.updateEvent}" />このイベントハンドラは、作成したコンポーネントイベントが起動されると updateEvent アクションを実行します。<aura:handler> タグは、c:expenseList の <aura:registerEvent> タグと同じ name 属性の値 updateExpense を使用します。
-
イベントを処理するための updateEvent アクションを結び付けます。formController.js で、次のコードを createExpense コントローラアクションの後に入力します。
1updateEvent : function(component, event, helper) { 2 helper.upsertExpense(component, event.getParam("expense")); 3}このアクションは、ヘルパー関数をコールし、{ Name : "Lunch" , Client__c : "ABC Co." , Reimbursed__c : true , CreatedDate : "2014-08-12T20:53:09.000Z" , Amount__c : 20} 形式のパラメータと値が含まれた経費オブジェクトを含む event.getParam("expense") を渡します。
- 変更を保存し、ブラウザを再読み込みします。
-
いずれかのレコードの [Reimbursed? (払い戻し済み?)] チェックボックスをオンにします。
レコードの背景色が変わります。ビューで払い戻し済み状況を変更すると、update イベントが起動され、親コンポーネントで処理されてから、サーバ側のコントローラアクション saveExpense が実行され、経費レコードが更新されます。
中級編
ライフサイクルの表示中には、このチュートリアルで使用した 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}新しいレコードを作成するために [Submit (送信)] ボタンをクリックするか、経費項目のチェックボックスをオンにすると、このテキストがアプリケーションによって表示されます。詳細は、「表示ライフサイクル中に起動されたイベント 」 を参照してください。