レコードの削除
Aura コンポーネントを介してビューとデータベースの両方からレコードを削除できます。
delete 操作で指定されたレコードを削除する Apex コントローラを作成します。次の Apex コントローラは経費オブジェクトレコードを削除します。
1@AuraEnabled
2public static Expense__c deleteExpense(Expense__c expense) {
3 // Perform isDeletable() check here
4 delete expense;
5 return expense;
6}コンピュータの設定方法に応じて、別のコンポーネントにレコードが削除されたことを伝えるイベントの作成が必要になる場合があります。たとえば、サブコンポーネントを反復処理してレコードを表示するコンポーネントがあるとします。サブコンポーネントに含まれるボタン (1) は、押されるとイベントを起動し、そのイベントを処理するコンテナコンポーネント (2) がクリックされたレコードを削除します。
1<aura:registerEvent name="deleteExpenseItem" type="c:deleteExpenseItem"/>
2<lightning:button label="Delete" onclick="{!c.delete}"/>
コンポーネントイベントを作成して、削除するレコードを取得して渡します。イベントに deleteExpenseItem という名前を付けます。
1<aura:event type="COMPONENT">
2 <aura:attribute name="expense" type="Expense__c"/>
3</aura:event>次に、削除するレコードを渡し、クライアント側コントローラでイベントを起動します。
1delete : function(component, evt, helper) {
2 var expense = component.get("v.expense");
3 var deleteEvent = component.getEvent("deleteExpenseItem");
4 deleteEvent.setParams({ "expense": expense }).fire();
5}コンテナコンポーネントに、イベントのハンドラを含めます。この例では、c:expenseList が、レコードを表示するサブコンポーネントです。
1<aura:handler name="deleteExpenseItem" event="c:deleteExpenseItem" action="c:deleteEvent"/>
2<aura:iteration items="{!v.expenses}" var="expense">
3 <c:expenseList expense="{!expense}"/>
4</aura:iteration>さらに、コンテナコンポーネントのクライアント側コントローラでイベントを処理します。
1deleteEvent : function(component, event, helper) {
2 // Call the helper function to delete record and update view
3 helper.deleteExpense(component, event.getParam("expense"));
4}最後に、コンテナコンポーネントのヘルパー関数で Apex コントローラをコールしてレコードを削除し、ビューを更新します。
1deleteExpense : function(component, expense, callback) {
2 // Call the Apex controller and update the view in the callback
3 var action = component.get("c.deleteExpense");
4 action.setParams({
5 "expense": expense
6 });
7 action.setCallback(this, function(response) {
8 var state = response.getState();
9 if (state === "SUCCESS") {
10 // Remove only the deleted expense from view
11 var expenses = component.get("v.expenses");
12 var items = [];
13 for (i = 0; i < expenses.length; i++) {
14 if(expenses[i]!==expense) {
15 items.push(expenses[i]);
16 }
17 }
18 component.set("v.expenses", items);
19 // Other client-side logic
20 }
21 });
22 $A.enqueueAction(action);
23}ヘルパー関数が Apex コントローラをコールしてデータベースのレコードを削除します。コールバック関数で、component.set("v.expenses", items) が、更新されたレコードの配列を使用してビューを更新します。