カスタムフィールドを使用すると、フォームの外観や操作感を拡張し、JavaScript、HTML、CSS を使って高度なロジックを追加できます。
カスタムフィールドには、フォームへのデータの受け渡し、フロントエンドとバックエンドのバリデーションの追加、focus や blur などの一般的なイベントの処理を容易にする内部メソッドが用意されています。
カスタムフィールドを使用すると、次のようなものを作成できます。
-
カスタムのデータ構造を持つフィールド。
-
サードパーティのウィジェットを使用するフィールド。
- 例: Google Address autocomplete
-
他のフィールドの表示/非表示を切り替えるロジックを持つフィールド。
-
値の取得に外部 API が必要なフィールド。
カスタムフィールドを使用するには、カスタムドメインを有効にする必要があります。カスタムドメイン外でカスタムフィールドを含むフォームをレンダリングすると、エラーが表示されます。
カスタムフィールド設定は次のとおりです。
カスタムフィールドのソースコードで参照するキーと値のペアを追加します。キーと値のペアには、フォームフィールドの変数を含めることができます。
Param の値は、フォームで init() メソッドが呼び出された後でのみ利用できます。
例:
以下の例では、カスタムフィールドの param 設定に、symbol={{fields.symbol}} と separator=, というキーと値のペアが設定されています。
カスタムフィールドにJavaScriptコードを追加します。
例:
デフォルトでは、カスタムフィールドはどのような形式の値でも受け付けます。ただし、値をサーバー側で検証するために JSON Schema を使用できます。
例:
複雑なバリデーション要件に対応するには、flowを使用できます。
カスタムフィールドに CSS を追加します。
これらのハンドラーを使用すると、フィールドにカスタムの動作を追加できます。
フィールドの作成時に一度だけ呼び出され、Params 設定で構成した params の値が渡されます。
HTML 要素、文字列、または何も返しません。
例:
ユーザーが同じフォームステップに再度アクセスしたときに呼び出されます。
このオプションは、UI ロジックを再レンダリングする必要がある場合や、変更されている可能性のある params の値を更新する必要がある場合に便利です。
フォーカスがカスタムフィールドのHTML要素に入ると呼び出されます。
カスタムフィールドの HTML 要素からフォーカスが外れたときに呼び出されます。
フォームがカスタムフィールドの値を1回以上取得する必要がある場合に呼び出されます。通常は、ユーザーがフォームステップを送信したときに実行されます。クライアント側のバリデーションを行う必要がある場合は、エラーをスローすることで、ユーザーにカスタムエラーメッセージを表示できます。
例:
カスタムフィールドをブロックする必要がある場合に呼び出されます。通常は、ユーザーがフォームステップを送信し、そのデータがバックエンドで処理されている間に実行されます。
カスタムフィールドのブロックを解除する必要がある場合に呼び出されます。通常は、ユーザーがフォームステップを送信した後、または検証エラーによりバックエンド側でのデータ処理が停止した後に実行されます。
フォームが init() メソッドを呼び出す前に、読み込みが完了していることが保証される URL の一覧を返します。
例:
コンテキストオブジェクトを渡す場合は、これらのメソッドを使用してフォームやコンポーネント内のロジックを処理できます。
context.custom.getValue()
現在のカスタムフィールドの値を返します。
context.custom.setValue()
現在のカスタムフィールドに値をセットします。
例:
context.custom.createUid()
現在のカスタムフィールドに対する一意の識別子を返します。
例:
context.custom.getParams()
現在のカスタムフィールド設定のパラメータを取得します。
パラメータ値は、フォームで init() メソッドが呼び出された後でのみ利用できます。
例:
他のフィールドの値を取得したり、フォーム内の別のステップに移動したりするためにフォームを操作する必要がある場合は、次のフォームメソッドを使用できます。
現在のフォームの一意の識別子を返します。
現在のフォームのルートとなるHTML要素を返します。
フォームの次のステップに進みます。
context.form.goPrevious()
前のフォームステップに移動します。
フォームがすべてのクライアント側のバリデーションに合格しているかどうかを、ブール値で返します。
続行する前に、既存のフィールド値に対してクライアント側でバリデーションを実行します。フィールドがバリデーションを通過しない場合は、エラーメッセージが表示されます。
context.form.getAllHiddenFields()
すべての非表示フィールドの値を格納したオブジェクトを返します。
context.form.setHiddenField(id, value)
非表示フィールドの値を設定します。
すべてのフィールドと非表示フィールドの値を含むオブジェクトを返します。
context.form.getField(id)
指定したフィールドのインスタンスを返します。
getNode() | true フィールドのルート HTML 要素を返します。
getValue() フィールドの値を返します。
setRequired(boolean) フィールドを必須に設定または解除します。
例:
setRequired() は、クライアント側でフィールドを必須に設定または解除するだけです。たとえば、あるフィールドの必須設定を解除しても、フィールド設定でそのフィールドが必須としてマークされている場合、値が入力されていなければフォームはエラーを返します。
以下のセクションでは、フォームに追加できるカスタムフィールドの例を示します。
あらかじめ定義された範囲内の値を返すカスタムフィールドです。
ソースコード:
色の16進数値を返すカスタムフィールドです。
ソースコード:
サードパーティ API を使用してオートコンプリートの値を返すカスタムフィールドです。
ソースコード:
API の値を使用する動的なドロップダウン カスタムフィールド
サードパーティ API を使用して、動的なドロップダウン リストから値を返すカスタムフィールドです。
ソースコード:
ユーザーがフィールドをさらに追加できるカスタムフィールドです。
ソースコード:
CSSコード: