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