Playframework2.1.0 で ComboBox のテンプレートを使ってみる
無いかなーと思ってソースコード読んでて見つけた。
公式ドキュメントに乗ってない(まだ書いてないだけ?)のでこれはみんな難儀するだろうなーということで共有。
- /play-2.1.0/framework/src/play/src/main/scala/views/helper
この辺開くとテンプレートヘルパーが色々おいてある。
で、意中のあの子は select.scala.html
中身を開くと
@**
* Generate an HTML select.
*
* Example:
* {{{
* @select(field = myForm("isDone"), options = options("Yes","No"))
* }}}
*
* @param field The form field.
* @param args Set of extra attributes.
* @param handler The field constructor.
*@
@(field: play.api.data.Field, options: Seq[(String,String)], args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang)
@input(field, args:_*) { (id, name, value, htmlArgs) =>
<select id="@id" name="@name" @toHtmlArgs(htmlArgs)>
@args.toMap.get('_default).map { defaultValue =>
<option class="blank" value="">@defaultValue</option>
}
@options.map { v =>
<option value="@v._1" @(if(value == Some(v._1)) "selected" else "")>@v._2</option>
}
</select>
}見たまま。
第一引数にフィールド指定して、第二引数にToupleのSequence突っ込めばよい。
val permissions = Seq(
"admin" -> "管理者うぇーい",
"power" -> "ユーザ",
"default" -> "名無しの権兵衛"
)
val userForm = Form(
touple(
"accountName" -> text.verifying(Constraints.nonEmpty),
"passCode" -> text.verifying(Constraints.nonEmpty, Constraints.minLength(5)),
"permitName" -> text,
"userName" -> text.verifying(Constraints.nonEmpty, Constraints.minLength(5))
)
)てな風に書いて
@helper.select(field=userForm("permitName"),options=permissions)でコンボボックス化。