§カスタムフィールドコンストラクタ
フィールドのレンダリングは<input>
タグだけでなく、<label>
や、CSSフレームワークがフィールドを装飾するために使用する可能性のある他のタグも必要です。
すべての入力ヘルパーは、この部分を処理する暗黙的なFieldConstructor
を受け取ります。デフォルトのもの(スコープ内に他のフィールドコンストラクタがない場合に使用されます)は、次のようなHTMLを生成します。
<dl class="error" id="username_field">
<dt><label for="username">Username:</label></dt>
<dd><input type="text" name="username" id="username" value=""></dd>
<dd class="error">This field is required!</dd>
<dd class="error">Another error</dd>
<dd class="info">Required</dd>
<dd class="info">Another constraint</dd>
</dl>
このデフォルトのフィールドコンストラクタは、入力ヘルパーの引数で渡すことができる追加のオプションをサポートしています。
'_label -> "Custom label"
'_id -> "idForTheTopDlElement"
'_help -> "Custom help"
'_showConstraints -> false
'_error -> "Force an error"
'_showErrors -> false
§独自のフィールドコンストラクタを作成する
多くの場合、独自のフィールドコンストラクタを作成する必要があります。まず、次のようなテンプレートを作成します。
@(elements: helper.FieldElements)
<div class="@if(elements.hasErrors) {error}">
<label for="@elements.id">@elements.label</label>
<div class="input">
@elements.input
<span class="errors">@elements.errors.mkString(", ")</span>
<span class="help">@elements.infos.mkString(", ")</span>
</div>
</div>
注: これは単なるサンプルです。必要に応じて複雑にすることができます。また、
@elements.field
を使用して元のフィールドにアクセスすることもできます。
次に、このテンプレート関数を使用してFieldConstructor
を作成します。
object MyHelpers {
import views.html.helper.FieldConstructor
implicit val myFields: FieldConstructor = FieldConstructor(html.myFieldConstructorTemplate.f)
}
フォームヘルパーで使用するには、テンプレートにインポートするだけです。
@import MyHelpers._
@helper.inputText(myForm("username"))
すると、入力テキストのレンダリングに独自のフィールドコンストラクタが使用されます。
FieldConstructor
の暗黙的な値をインラインで設定することもできます。
@implicitField: FieldConstructor = @{ helper.FieldConstructor(myFieldConstructorTemplate.f) }
@helper.inputText(myForm("username"))
次へ: JSONの操作
このドキュメントにエラーを見つけましたか?このページのソースコードはこちらにあります。ドキュメントのガイドラインを読んだ後、お気軽にプルリクエストを送信してください。質問やアドバイスがありますか? コミュニティフォーラムでコミュニティとの会話を始めてください。