サーバ側のアクションのコール
クライアント側コントローラは、名前-値のペアを含む、オブジェクトリテラル表記の JavaScript オブジェクトです。この名前はそれぞれクライアント側のアクションに対応します。この値は、アクションに関連付けられた関数コードです。
コンポーネントからサーバコールをトリガするとします。次のコンポーネントには、クライアント側コントローラの echo アクションに接続されるボタンが含まれます。SimpleServerSideController には、クライアント側コントローラから渡される文字列を返すメソッドが含まれます。
1<aura:component controller="SimpleServerSideController">
2 <aura:attribute name="firstName" type="String" default="world"/>
3 <ui:button label="Call server" press="{!c.echo}"/>
4</aura:component>次のクライアント側コントローラには、サーバ側コントローラで serverEcho メソッドを実行する echo アクションが含まれます。クライアント側コントローラに、サーバ側のアクションが返されたら呼び出されるコールバックアクションを設定します。この場合、コールバック関数がユーザにサーバから返された値を含むアラートを表示します。action.setParams({ firstName : cmp.get("v.firstName") }); は、コンポーネントから firstName 属性を取得して、サーバ側コントローラの serverEcho メソッドに firstName 引数の値を設定します。
1swfobject.registerObject("clippy.codeblock-1", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17({
18 "echo" : function(cmp) {
19 // create a one-time use instance of the serverEcho action
20 // in the server-side controller
21 var action = cmp.get("c.serverEcho");
22 action.setParams({ firstName : cmp.get("v.firstName") });
23
24 // Create a callback that is executed after
25 // the server-side action returns
26 action.setCallback(this, function(response) {
27 var state = response.getState();
28 // This callback doesn’t reference cmp. If it did,
29 // you should run an isValid() check
30 //if (cmp.isValid() && state === "SUCCESS") {
31 if (state === "SUCCESS") {
32 // Alert the user with the value returned
33 // from the server
34 alert("From server: " + response.getReturnValue());
35
36 // You would typically fire a event here to trigger
37 // client-side notification that the server-side
38 // action is complete
39 }
40 //else if (cmp.isValid() && state === "ERROR") {
41 else if (state === "ERROR") {
42 var errors = response.getError();
43 if (errors) {
44 $A.logf("Errors", errors);
45 if (errors[0] && errors[0].message) {
46 $A.error("Error message: " +
47 errors[0].message);
48 }
49 } else {
50 $A.error("Unknown error");
51 }
52 }
53 });
54
55 // optionally set abortable flag here
56
57 // A client-side action could cause multiple events,
58 // which could trigger other events and
59 // other server-side action calls.
60 // $A.enqueueAction adds the server-side action to the queue.
61 $A.enqueueAction(action);
62 }
63})クライアント側コントローラでは、c の値プロバイダを使用してサーバ側コントローラのアクションを呼び出します。この構文は、クライアント側コントローラのアクションを呼び出すためにマークアップで使用するものと同じです。cmp.get("c.serverEcho") コールは、サーバ側コントローラで serverEcho メソッドをコールしていることを示します。サーバ側コントローラのメソッド名は、クライアント側のコールの c. に続く内容と完全に一致している必要があります。
$A.enqueueAction(action) は、サーバ側コントローラのアクションを、実行されるアクションのキューに追加します。この方法でキューに追加されたアクションはすべて、イベントループの最後に実行されます。フレームワークでは、個々のアクションごとに個別の要求を送信するのではなく、イベントチェーンを処理し、関連する要求をバッチにまとめてからキューのアクションを実行します。これらのアクションは非同期で、コールバックが設定されています。
アクションの状態
アクションの有効な状態は次のとおりです。
- NEW (新規)
- アクションが作成されていますが、まだ処理されていません。
- RUNNING (実行中)
- アクションを処理中です。
- SUCCESS (成功)
- アクションが正常に実行されました。
- ERROR (エラー)
- サーバからエラーが返されました。
- ABORTED (中止)
- アクションが中止されました。