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

ステップ 6: アプリケーションとイベントをインタラクティブにする

イベントは、コンポーネント間でデータの共有を可能にすることによって、インタラクティブレイヤをアプリケーションに追加します。経費リストビューのチェックボックスをオン/オフにしたときに、関連するコンポーネントデータに基づいてビューとレコードの両方を更新するイベントを起動する必要がある場合があります。
次のフローチャートに、expenseList コンポーネントでチェックボックスをオン/オフにすることによってデータの変更が取得されるときの、アプリケーションでのデータフローを示します。[Reimbursed? (払い戻し済み?)] チェックボックスをオン/オフにすると、このブラウザのクリックイベントにより、ここで作成するコンポーネントイベントが起動されます。このイベントは、経費オブジェクトをハンドラコンポーネントに渡し、そのコントローラは Apex コントローラメソッドをコールして関連する経費レコードを更新します。ここでは、このサーバ応答を処理しないため、その後の応答はクライアント側で無視されます。経費でチェックボックスをオンにすると、レコードを更新するイベントがトリガされる。

イベントを起動して親コンポーネントのイベントを処理するには、まずイベントとそのハンドラを作成します。

  1. [File (ファイル)] | [New (新規)] | [Lightning イベント] をクリックします。
  2. [New Event (新規イベント)] ウィンドウで、「updateExpenseItem」と入力します。これにより、updateExpenseItem.evt という新しいイベントが作成されます。
  3. updateExpenseItem.evt で、次のコードを入力します。

    イベントで定義している属性が、起動元のコンポーネントからハンドラに渡されます。

    1<aura:event type="COMPONENT">
    2    <!-- If youre using a namespace, use myNamespace.Expense__c instead. -->
    3    <aura:attribute name="expense" type="Expense__c"/>
    4</aura:event>
    フレームワークには、コンポーネントイベントとアプリケーションイベントという 2 種類のイベントがあります。

    可能な場合は常に、アプリケーションイベントではなくコンポーネントイベントを使用します。コンポーネントイベントを処理できるのは、コンテインメント階層で上位にあるコンポーネントのみであるため、それらのイベントを把握する必要があるコンポーネントにのみ使用が限定されます。アプリケーションイベントは、特定のレコードへの移動など、アプリケーションレベルで処理する必要があるものに適しています。

    メモ

    コンポーネントイベントを使用します。expenseList.cmp には [Reimbursed? (払い戻し済み?)] チェックボックスが含まれていることを思い出してください。

  4. expenseList.cmp を更新して、イベントの起動を登録します。このタグを <aura:attribute> タグの後に追加します。
    1<aura:registerEvent name="updateExpense" type="c:updateExpenseItem"/>

    [Reimbursed? (払い戻し済み?)] チェックボックスは、change="{!c.update}" で示��れるクライアント側のコントローラアクションに結び付けられます。次に、update アクションを設定します。

  5. 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 オブジェクトを使用して起動されます。

  6. ハンドラコンポーネント form.cmp で、次のハンドラコードを <aura:attribute> タグの前に追加します。
    1<aura:handler name="updateExpense" event="c:updateExpenseItem" action="{!c.updateEvent}" />

    このイベントハンドラは、作成したコンポーネントイベントが起動されると updateEvent アクションを実行します。<aura:handler> タグは、c:expenseList<aura:registerEvent> タグと同じ name 属性の値 updateExpense を使用します。

  7. イベントを処理するための 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") を渡します。

  8. 変更を保存し、ブラウザを再読み込みします。
  9. いずれかのレコードの [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 (送信)] ボタンをクリックするか、経費項目のチェックボックスをオンにすると、このテキストがアプリケーションによって表示されます。詳細は、「表示ライフサイクル中に起動されたイベント 」 を参照してください。

https://<myDomain>.lightning.force.com/<namespace>/expenseTracker.app (<myDomain> はカスタム Salesforce ドメインの名前) にアクセスすると、スタンドアロンアプリケーションとして先ほど作成したアプリケーションに現時点でアクセスできます。Salesforce1 でアクセスできるようにするには、「Salesforce1 への Lightning コンポーネントの追加」を参照してください。アプリケーションをパッケージ化して AppExchange で配布するには、「アプリケーションとコンポーネントの配布」を参照してください。