イベント処理の概要
@pocketのイベントシステムは、特定のイベントが発火した際に、事前に登録された処理を実行する形で動作します。
イベントの基本動作
@pocketのイベント処理は、以下のような基本構造を持っています。
- イベントの発火: 用意されたイベント名が発火すると、対応する処理が呼び出されます。
- イベントの登録: 任意のイベントに対して、コールバック関数を登録できます。(イベントハンドラーの登録)
- イベントオブジェクトの受け渡し: コールバック関数はイベントオブジェクトを受け取り、イベントごとに異なるデータを利用できます。
イベント登録と発火の仕組み
イベントリスナーは、第一引数にイベント名、第二引数にコールバック関数を指定して登録します。コールバック関数の引数には、イベントオブジェクトが渡されます。
イベントオブジェクトは各イベントごとに異なるデータを持ちます。
atPocket.events.on('app.record.edit.show', (event) => {
console.log(event.appId, event.recordId);
return event;
});
イベント名の {action} について
レコードの画面で発火するイベント名には、画面を表す {action} が含まれます。
{action} | 対象の画面 |
|---|---|
create | レコード作成画面 |
edit | レコード編集画面 |
detail | レコード詳細画面 |
作成画面と編集画面の両方で同じ処理を行いたい場合は、イベント名を配列で指定します。
atPocket.events.on(['app.record.create.show', 'app.record.edit.show'], (event) => {
return event;
});
ハンドラーの中で値を変更する
イベントハンドラーの中から atPocket.app.record.set() を呼び出すことはできません。値を変更する場合は、引数のイベントオブジェクトの record を書き換えて return してください。
atPocket.events.on('app.record.edit.change', (event) => {
event.record['field-3'].value = '計算結果';
return event;
});
詳しくは レコードへの値の反映 を参照してください。
ハンドラーの有効範囲
イベントハンドラーは、配信されるカスタマイズ JS / プラグインのファイル単位で分離されます。
- 同じイベントに複数のカスタマイズ JS / プラグインがハンドラーを登録しても、すべてが登録順に実行されます。
- 別のアプリやポータルへ移動すると、登録したハンドラーは自動的に解放されます。
atPocket.events.off()で解除できるのは、自身が登録したハンドラーだけです。他のプラグインのハンドラーには影響しません。