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)
でコンボボックス化。