中止可能なアクション
1 つのトランザクションのためのアクションのセット (クリックコールバックなど) はまとめてサーバへの送信キューに入れられます。ユーザが別のナビゲーション項目をクリックするなどして、別のトランザクションを開始した場合、すべての中止可能なアクションはキューから削除されます。中止されたアクションはサーバには送信されず、その状態は ABORTED に設定されます。
中止可能なアクションは、通常はサーバに送信されて実行されます (ただし、その後で中止可能なアクションがキューに追加されたときにサーバからまだ返されていない場合を除きます)。
一部のアクションがサーバに送信され、まだ返されていない場合、そのアクションは完了しますが、実行されるのは ABORTED 状態 (action.getState() === "ABORTED") に関連付けられたコールバックロジックのみです。これにより、コンポーネントは必要に応じてメッセージをログに記録するか、中止されたアクションがある場合はクリーンアップ処理を実行できます。
アクションを中止可能としてマーク
サーバ側アクションを中止可能とマークするには、JavaScript で Action オブジェクトに対して setAbortable() メソッドを使用します。次に例を示します。
1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17var action = cmp.get("c.serverEcho");
18action.setAbortable();
19setCallback() には、コールバックを呼び出すアクション状態を登録する 3 つ目のパラメータがあります。setCallback() に 3 つ目の引数を指定しないと、デフォルトで SUCCESS および ERROR 状態が登録されます。コールバックで中止されたアクションがあるかどうかを確認し、中止されたアクションをログに記録するなど、適切なアクションを実行するには、3 つ目の引数に ABORTED 状態を明示的に設定し、setCallback() をコールします。次に例を示します。
1swfobject.registerObject("clippy.codeblock-1", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// Process default action states
18action.setCallback(this, function(response) {
19 var state = response.getState();
20 if (state === "SUCCESS") {
21 // Alert the user with the value returned from the server
22 alert("From server: " + response.getReturnValue());
23 }
24 // process other action states
25});
26// Explicitly register callback for ABORTED
27action.setCallback(this,
28 function(response) {
29 alert("The action was aborted");
30 },
31 "ABORTED"
32);
33急速な連続クリック
ナビゲーションメニューの各アクションからサーバへの要求が遅い場合を考えてみましょう。ユーザがナビゲーション項目を立て続けに何回もクリックして、後続のクリックの前にサーバから応答が戻らなかったとします。すべてのアクションが中止可能とマークされている場合、最後のクリックを除き、コールバックは一切コールされません。これにより、複数のサーバ応答を連続して表示したために発生する画面のちらつきがなくなり、ユーザの操作性が向上します。
段階的な読み込み
最初の項目セットを読み込み、最初のセットの表示が完了した後に後続のデータを読み込む、というようにデータの段階的な読み込みが必要になる場合があります。これを行うには、2 回目の一連のアクションを遅延させてコールし、Action オブジェクトの setParentAction() メソッドを使用して、2 回目のセットの各アクションを最初のセットのいずれかのアクションに関連付けます。これにより、ユーザが他の画面に移動した場合、2 回目のアクションのセットは中止されます。