初めに
この項目 (Trailhead)は長くて難解のため記事を2つに分けております
第一弾はこちら
Expenses.cmp
コンポーネントからKickされるController
- 基本的には下記3つをやっているだけ
- 設定
- フォームの値を処理
- エラーがなければ処理を実行
({ clickCreate: function(component, event, helper) { let validExpense = component.find('expenseform').reduce( function (validSoFar, inputCmp) { // Displays error messages for invalid fields inputCmp.showHelpMessageIfInvalid(); return validSoFar && inputCmp.get('v.validity').valid; } , true); // If we pass error checking, do some real work if(validExpense){ // Create the new expense let newExpense = component.get("v.newExpense"); console.log("Create expense: " + JSON.stringify(newExpense)); helper.createExpense(component, newExpense); } } })
解説
component.find('auraId')
は<lightning:input>
項目の配列への参照を取得する.reduce()
メソッドは、配列をvalidSofar
で取得された単一値にする. この値は無効値が見つかるまでtrue
のまま. 無効値とは、空の必須項目や指定された最小値未満の数値が含まれる値.(min
やrequired
属性に設定されたもの)inputCmp.get('v.validity').valid
は配列内の現在の入力項目の有効性を返却するinputCmp.showHelpMessageIfInvalid();
は無効な項目のエラーメッセージを表示する. formの<lightning:input/>
の属性である下記などでメッセージをカスタマイズ可能.
messageWhenRangeUnderflow="Enter an amount that's at least $0.10." messageWhenValueMissing="Did you forget me?"
showHelpMessageIfInvalid()
をcallするためには、各項目への参照が必要なため、component.get("v.newExpense")
から取得した値からでは参照ができない.helper.createExpense(component, newExpense);
は、ExpensesController.js
に関連するhelper
をcallする.
フォームで入力されたExpense
レコードを保存する場所を作成する
.cmp
ファイルの上部に配列を指定する.
<aura:attribute name="expenses" type="Expense__c[]"/>
helper
({ createExpense: function(component, expense) { // .cmpファイルに定義した空のexpenses配列を取得する let theExpenses = component.get("v.expenses"); // Copy the expense to a new object // THIS IS A DISGUSTING, TEMPORARY HACK // helperに渡されたformのexpenseレコードを取得する let newExpense = JSON.parse(JSON.stringify(expense)); // 配列に追加 theExpenses.push(newExpense); // .cmpファイルに定義したexpensesにセット component.set("v.expenses", theExpenses); } })
成果物
上記項は特にメモなし。とりあえず自分で動かしてみるのが吉。。