play-2.0.3 を使用しています。
私はマップを持っていて、ドロップダウンリストに Int->String (@select のようなものを使用) を設定したいと考えています。
@select は Seq[(String, String) のみを受け入れることを知っています。
このヘルパーをオーバーロードして Seq[(Int, String)] を受け入れるにはどうすればよいですか?
私は次のことをしようとしました:
- select.scala.html のソースを views/mySelect.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.
*@
@import helper._
@(field: Field, options: Seq[(Int,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>
}
しかし、うまくいかないようです。
遊びは言う
')' expected but identifier found.
ラインで
@(field: Field, options: Seq[(Int,String)], args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang)
ところで、(Symbol,Any)の後の * は何ですか?
プレイはそれが好きではありません。この*を削除しても、play は次のように言います。
not found: value field
同じ行を参照しています。
お願い助けて。