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

Lightning 基本コンポーネントでのイベント処理

基本コンポーネントは軽量で、HTML マークアップによく似ています。標準的な HTML の手法に従って、onfocus などのイベントハンドラを属性として提供します。ui 名前空間のコンポーネントのように、Lightning コンポーネントイベントを登録して起動するのではありません。

マークアップを見て、event.target または event.currentTarget を使用して DOM 要素にアクセスするのではないかと思うかもしれません。けれども、この方法によるアクセスでは、変更される可能性の��る別のコンポーネントの DOM 要素にアクセス可能になるため、カプセル化が壊れます。

LockerService (Summer '17 ですべての組織で有効化になる予定) は、カプセル化を適用するものです。ここで説明するメソッドを使用して、コードを LockerService に対応させます。

イベントを起動したコンポーネントを取得するには、event.getSource() を使用します。

1<aura:component>
2    <lightning:button name="myButton" onclick="{!c.doSomething}"/>
3</aura:component>
1({
2    doSomething: function(cmp, event, helper) {
3        var button = event.getSource();
4
5        //The following patterns are not supported
6        //when you’re trying to access another component’s
7        //DOM elements.
8        var el = event.target;
9        var currentEl = event.currentTarget;
10    }
11})
この構文を使用して、イベントに渡されたコンポーネント属性を取得します。
1event.getSource().get("v.name")

イベントハンドラの再利用

event.getSource() は、どのコンポーネントがイベントを起動したかを判断するうえで役立ちます。たとえば、同じ onclick ハンドラを再利用するボタンがいくつかあるとします。イベントを起動したボタンの名前を取得するには、event.getSource().get("v.name") を使用します。

1<aura:component>
2    <lightning:button label="New Record" name="new" onclick="{!c.handleClick}"/>
3    <lightning:button label="Edit" name="edit" onclick="{!c.handleClick}"/>
4    <lightning:button label="Delete" name="delete" onclick="{!c.handleClick}"/>
5</aura:component>
1({
2    handleClick: function(cmp, event, helper) {
3        //returns "new", "edit", or "delete"
4        var buttonName = event.getSource().get("v.name");
5    }
6})

onactive ハンドラを使用した有効なコンポーネントの取得

lightning:tablightning:menuItem などのコンポーネントは onactive ハンドラをサポートするため、ターゲットコンポーネントが有効になったときにそのコンポーネントへの参��を取得できます。コンポーネントを数回クリックすると、ハンドラが 1 回だけ呼び出されます。

たとえば、lightning:buttonMenu コンポーネントのメニュー項目がクリックされたときにそのチェックマークを切り替えることができます。
1<aura:component>
2    <lightning:buttonMenu alternativeText="Show menu">
3        <lightning:menuItem value="new" onactive="{! c.handleActive }" label="New" checked="true" />
4        <lightning:menuItem value="edit" onactive="{! c.handleActive }" label="Edit" checked="false" />
5        <lightning:menuItem value="delete" onactive="{! c.handleActive }" label="Delete" checked="false" />
6    </lightning:buttonMenu>
7</aura:component>
1({
2    handleActive: function (cmp, event) {
3        var menuItem = event.getSource();
4        menuItem.set("v.checked", !menuItem.get("v.checked"));
5    }
6})

タブまたはメニュー項目の ID または値のみが必要で、ターゲットコンポーネントへの参照は不要な場合は、onselect イベントハンドラを使用します。

メモ

onselect ハンドラを使用した ID および値の取得

一部のコンポーネントは、イベントを子コンポーネントに渡すイベントハンドラを提供します。次のコンポーネントの onselect イベントハンドラなどです。
  • lightning:buttonMenu
  • lightning:tabset
event.detail 構文は引き続きサポートされますが、今後のリリースで event.detail は廃止される予定であるため、onselect ハンドラで次のパターンを使用するように JavaScript コードを更新することをお勧めします。
  • event.getParam("id")
  • event.getParam("value")
たとえば、クライアント側コントローラから lightning:buttonMenu コンポーネントで選択されたメニュー項目の値を取得できます。
1//Before 
2var menuItem = event.detail.menuItem;
3var itemValue = menuItem.get("v.value");
4//After
5var itemValue = event.getParam("value");
同様に、lightning:tabset コンポーネントで選択されたタブの ID を取得するには、次のコードを使用します。
1//Before
2var tab = event.detail.selectedTab;
3var tabId = tab.get("v.id");
4//After
5var tabId = event.getParam("id");

ターゲットコンポーネントへの参照が必要な場合は、代わりに onactive イベントハンドラを使用します。

メモ