aviks sugestia działa. Być może nie zaimportowałeś szablonu poprawnie. Zrobiłem to w ten sposób. Najpierw stworzył customSelectField.scala.html w views/helper/
jak sugeruje Avik:
@(field: play.api.data.Field, options: Seq[(String,String)], args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang)
@getAsTuple(x : Any) = @{
x match {
case (value: String, text: String) => (value, text)
case _ => ("-1", "Select")
}
}
@input(field, args:_*) { (id, name, value, htmlArgs) =>
<select id="@id" name="@name" @toHtmlArgs(htmlArgs)>
@args.toMap.get('_default).map { dv =>
<option class="blank" value="@getAsTuple(dv)._1">@getAsTuple(dv)._2</option>
}
@options.map { v =>
<option value="@v._1" @(if(value == Some(v._1)) "selected" else "")>@v._2</option>
}
</select>
}
a potem w moim szablonu np index.scala.html gdzie chcę wybierz robię:
@import helper._
@helper.customSelectField(
field = proposeNewTimeForm("selectTime"),
options = times.get,
'_label -> "Category",
'_default -> ("-1" -> "-- Choose a category --"),
'_showConstraints -> false
)
Zapamiętaj należy NIE zrobić:
@implicitField = @{
FieldConstructor(helper.customSelectField.f)
}
ponieważ spowoduje to Twój erro r.
Jeśli chcesz sformatować html otaczający wybierz jakoś można zrobić tak jak z customField.scala.html
w widokach/pomocnik /:
@(elements: helper.FieldElements)
@elements.input
<span class="errors">@elements.errors.mkString(", ")</span>
<span class="help">@elements.infos.mkString(", ")</span>
a następnie w górnej części index.scala.html
:
@import helper._
@implicitField = @{
FieldConstructor(helper.customField.f)
}
Mam nadzieję, że to pomoże!
Otrzymuję ten błąd -> niedopasowanie typu; found: (play.api.data.Field, Seq [(String, String)], Array [(Symbol, Any)]) => play.api.templates.Html required: views.html.helper.FieldElements => graj .api.templates.Html Uwaga: niejawna metoda implicitFieldConstructor nie ma tutaj zastosowania, ponieważ pojawia się po punkcie aplikacji i nie ma jawnego typu wyniku. – Manoj