サーバ側のアクションのコール
クライアント側コントローラは、名前-値のペアの対応付けを含む、オブジェクトリテラル表記の JavaScript オブジェクトです。
コンポーネントからサーバコールをトリガするとします。次のコンポーネントには、クライアント側コントローラの echo アクションに接続されるボタンが含まれます。SimpleServerSideController には、クライアント側コントローラから渡される文字列を返すメソッドが含まれます。
1<aura:component controller="SimpleServerSideController">
2 <aura:attribute name="firstName" type="String" default="world"/>
3 <lightning:button label="Call server" onclick="{!c.echo}"/>
4</aura:component>このクライアント側コントローラには、サーバ側コントローラで serverEcho メソッドを実行する echo アクションが含まれます。
1({
2 "echo" : function(cmp) {
3 // create a one-time use instance of the serverEcho action
4 // in the server-side controller
5 var action = cmp.get("c.serverEcho");
6 action.setParams({ firstName : cmp.get("v.firstName") });
7
8 // Create a callback that is executed after
9 // the server-side action returns
10 action.setCallback(this, function(response) {
11 var state = response.getState();
12 if (state === "SUCCESS") {
13 // Alert the user with the value returned
14 // from the server
15 alert("From server: " + response.getReturnValue());
16
17 // You would typically fire a event here to trigger
18 // client-side notification that the server-side
19 // action is complete
20 }
21 else if (state === "INCOMPLETE") {
22 // do something
23 }
24 else if (state === "ERROR") {
25 var errors = response.getError();
26 if (errors) {
27 if (errors[0] && errors[0].message) {
28 console.log("Error message: " +
29 errors[0].message);
30 }
31 } else {
32 console.log("Unknown error");
33 }
34 }
35 });
36
37 // optionally set storable, abortable, background flag here
38
39 // A client-side action could cause multiple events,
40 // which could trigger other events and
41 // other server-side action calls.
42 // $A.enqueueAction adds the server-side action to the queue.
43 $A.enqueueAction(action);
44 }
45})クライアント側コントローラでは、c の値プロバイダを使用してサーバ側コントローラのアクションを呼び出します。また、マークアップでこの c 構文を使用して、クライアント側コントローラのアクションも呼び出します。
cmp.get("c.serverEcho") コールは、サーバ側コントローラで serverEcho メソッドをコールしていることを示します。サーバ側コントローラのメソッド名は、クライアント側のコールの c. に続く内容と完全に一致している必要があります。この場合、それは serverEcho です。
serverEcho Apex メソッドの実装は「Apex サーバ側コントローラの概要」で示されています。
action.setParams() を使用して、サーバ側コントローラに渡されるデータを設定します。次のコールは、firstName 属性値に基づいて、サーバ側コントローラの serverEcho メソッドで firstName 引数の値を設定します。
1action.setParams({ firstName : cmp.get("v.firstName") });action.setCallback() は、サーバ側のアクションが返されたら呼び出されるコールバックアクションを設定します。
1action.setCallback(this, function(response) { ... });サーバ側のアクションの結果は、コールバックの引数である response 変数に格納されます。
response.getState() は、サーバから返されたアクションの状態を取得します。
response.getReturnValue() は、サーバから返された値を取得します。この例では、コールバック関数がユーザにサーバから返された値を含むアラートを表示します。
$A.enqueueAction(action) により、サーバ側コントローラのアクションがアクション実行キューに追加されます。キューに追加されたアクションはすべて、イベントループの最後に実行されます。フレームワークでは、個々のアクションごとに個別の要求を送信するのではなく、イベントチェーンを処理し、キューのアクションを 1 つの要求にまとめます。これらのアクションは非同期で、コールバックが設定されます。