consentFlow フォームビルダーで利用可能なライフサイクルイベント一覧
logic のトリガーや form.on() で利用できるイベントの一覧です。
以下のイベント名は内部的に定義している特別なライフサイクルイベント
| イベント | 発火タイミング | 備考 |
|---|---|---|
initialized | コンポーネントの初期化完了時 | Formio が内部的に保証する特別なライフサイクルイベント。customDefaultValue の評価後に発火するため、初期値を利用した処理に最適。 |
change | フィールドの値が変更された時 | consentFlow では change イベントを起点に serializeData() が実行され SearchFieldJson に書き込まれる。 |
blur | フォーカスが外れた時 | 入力完了後のバリデーションや補完処理に使用する。 |
focus | フォーカスが当たった時 | 関連フィールドの表示切り替えや入力補助の表示に活用できる。 |
submit | フォームの送信時 | consentFlow では XPages 側でフォーム送信を制御しているため通常使用しない。 |
error | バリデーションエラー発生時 | カスタムエラーメッセージの表示やエラー箇所へのスクロール処理に使用できる。 |
render | フォームの描画完了時 | DOM 操作が必要な処理に使用する。initialized より後に発火する。 |
prevPage / nextPage | ウィザード形式のページ遷移時 | Wizard 形式のフォーム専用。通常の検索フォームでは使用しない。 |
initialized イベントについて
initialized は内部的に定義している特別なライフサイクルイベントです。 任意の文字列(カスタムイベント)とは異なり、開発者が form.emit() で手動発火しなくても フォームが必ず発火を保証します。 customDefaultValue の評価が完了した後に発火するため、初期値を前提とした処理を安全に記述できます。
logic JSON の例
{
"name": "onInitialized",
"trigger": {
"type": "event",
"event": "initialized"
},
"actions": [
{
"name": "doSomething",
"type": "customAction",
"customAction": "/* data には初期値が既にセット済み */"
}
]
}
consentFlow での注意点
consentFlowではAjax処理(XPagesの部分更新)発生すると WEBフォームが再描画され、initialized が再発火します。 ボタンクリックなど一度だけ実行したい処理には window._formioInitialized フラグなどによるガードが必須です。
if (!window._formioInitialized) {
window._formioInitialized = true;
// SearchFieldJson に初期データを書き込む
var hidden = document.querySelector('input[id$="SearchFieldJson"]');
if (hidden) {
hidden.value = JSON.stringify(data); // data は customAction コンテキスト変数
}
// 300ms 後に検索ボタンをクリック
setTimeout(function() {
var btn = document.querySelector('button[id$="buttonWebFormSearch"]');
if (btn) btn.click();
}, 300);
}
customAction で使えるコンテキスト変数
logic の customAction 内で自動的に利用可能な変数の一覧です。
| 変数 | 内容 |
|---|---|
data | フォーム全体の現在のデータオブジェクト。初期値・入力値ともに含む。form.submission.data と異なり、customAction コンテキストでは常に安全に参照できる。 |
instance | ロジックが定義されているコンポーネントのインスタンス。instance.getValue() / instance.setValue() で操作可能。 |
form | Formio フォームのインスタンス。form.getComponent('key') で他コンポーネントを取得できる。form.submission は初期化タイミングによって未定義になる場合があるため注意。 |
component | 対象コンポーネントの JSON 定義オブジェクト(スキーマ)。 |
row | DataGrid や EditGrid 内のコンポーネントの場合、現在の行データ。通常の検索フォームでは使用しない。 |
カスタムイベントの手動発火
form.emit() を使うと任意のイベントを手動発火できます。コンポーネント間を直接参照せずに連携させたい場合に有効です。
// 発火側
form.emit('myCustomEvent');
受け取り側は別コンポーネントの logic に以下のように定義します。
{
"trigger": {
"type": "event",
"event": "myCustomEvent"
}
}