LightningでsObjectを扱いたい場合、aura:attributeタグで次のように宣言する必要があります。カスタムオブジェクトの宣言では名前空間プレフィックスをつけないと認識されません。
<!-- LightningでsObjectの宣言 --> <aura:attribute name="account" type="Account" /> <!-- カスタムオブジェクトの場合は名前空間プレフィックスが必要 <aura:attribute name="expenses" type="BarnSwallow.Expense__c" />
これで変数「account」をLightning内で使用できるようになります。
<ui:inputText aura:id="my-name" label="Account Name = " value="{!v.account.Name}" placeholder="Name" />
ApexComponentのときに使用していたapex:attributeでは呼び出し元からパラメータを受け取るだけでしたが、Lightningのaura:attributeではこのように変数を宣言したりcontroller.js側で値をセットしたりという使い方ができるみたいです。
ここで一つ注意しなくてはいけないことがあります。aura:attributeでsObjectを宣言する際には、default属性で使用する項目を宣言する必要があります。ここで宣言しないとcontroller.js側で正常に呼び出すことができません。
<aura:attribute name="account" type="Account" default="{ 'sobjectType': 'Account', 'Name': 'sforce', 'AccountNumber': '', 'NumberOfEmployees': 1 }" />
きちんと宣言しておけば次のように値を操作できます。
Lightningで宣言したsObjectの値をApexクラスに渡す場合は次のような感じです。
saveAccount : function(component, account, callback) { // 変数「saveAccount」取得 var action = component.get("c.saveAccount"); console.log(account); // Apexの引数に値セット action.setParams({ "account": account }); if (callback) { action.setCallback(this, callback); } // ApexMethod実行 $A.enqueueAction(action); }
取引先の保存処理のサンプルを作ってみました。
Apexクラスの処理結果をLightningの変数にセットしたい場合は次のように書きます。
handleGetAccounts : function(component, event, helper) { var listLimit = event.getParam("listLimit"); var action = component.get("c.getSelectAccounts"); action.setParams({ "listLimit": listLimit }); action.setCallback(this, function(data) { // 処理結果を変数「v.accounts」にセット component.set("v.accounts", data.getReturnValue()); }); $A.enqueueAction(action); },
サンプルはこちらです。
この記事はSalesforce1 Lightning Advent Calendar 2014 - 20日目の記事です。
Salesforce1 Lightning Advent Calendar 2014 - Qiita