Playframework scala helper для выбора ввода с optgroup

Является ли в playframework scala helper доступной optgroup при выборе ввода?

Пример:

http://jsfiddle.net/g4ffzvs8/

Код:

<select id="source">
 <optgroup label="Alaskan/Hawaiian Time Zone">
 <option value="AK">Alaska</option>
 <option value="HI">Hawaii</option>
 </optgroup>
 <optgroup label="Pacific Time Zone">
 <option value="CA">California</option>
 <option value="NV">Nevada</option>
 <option value="OR">Oregon</option>
 <option value="WA">Washington</option>
 </optgroup>
 </select>
3 ответа

Вот мое рабочее решение:

<div incidenttype.id").haserrors)="" {error}"="">
 <label incidenttype.id").haserrors)="" {error}="" else="" {success}"="" for="incidentType_id">Rodzaj</label>
 <div incidenttype.id").haserrors)="" {error}="" else="" {success}"="">
 <select name="incidentType.id" onchange="checkSelectedValue(this)">
 
 @for(opt <- new IncidentType().getOptionGroups()) {
 <optgroup label="@opt._1">
 @for(op <- opt._2) {
 @**
 <option value="@op._1">@op._2</option>
 **@
 <option value="@op._1" @if(medicalincidentform("incidenttype.id").value()="=" op._1)="" {selected="selected" }="">@op._2</option>
 }
 </optgroup>
 }
 </select>
 </div>
</div>


Ни один из ответов не удовлетворил меня. Создала новую версию помощника select, которая принимает имена групп:

@(field: play.api.data.Field, options: Seq[(String, Seq[(String,String)])], args: (Symbol,Any)*)(implicit handler: helper.FieldConstructor, messages: play.api.i18n.Messages)

@helper.input(field, args:_*) { (id, name, value, htmlArgs) =>
 @defining( if( htmlArgs.contains('multiple) ) "%s[]".format(name) else name ) { selectName =>
 @defining( field.indexes.nonEmpty && htmlArgs.contains('multiple) match {
 case true => field.indexes.map( i => field("[%s]".format(i)).value ).flatten.toSet
 case _ => field.value.toSet
 }){ selectedValues =>
 <select id="@id" name="@selectName" @tohtmlargs(htmlargs)="">
 @args.toMap.get('_default).map { defaultValue =>
 <option value="">@defaultValue</option>
 }
 @options.map { case (groupName, elements) =>
 <optgroup label="@groupName">
 @elements.map { case (k, v) =>
 @defining( selectedValues.contains(k) ) { selected =>
 @defining( args.toMap.get('_disabled).exists { case s: Seq[String] => s.contains(k) }){ disabled =>
 <option value="@k" @if(selected){="" selected="selected" }@if(disabled){="" disabled}="">@v</option>
 }
 }
 </optgroup>
 }}
 </select>
 }}
}

(Используйте lang: play.api.i18n.Lang вместо messages: play.api.i18n.Messages для версий Play до 2.4).

Вы можете использовать этого помощника таким образом:

@groupSelect(
 form("brand"),
 Seq(
 "Swedish Cars" -> Seq(
 "volvo" -> "Volvo",
 "saab" -> "Saab"
 ),
 "German Cars" -> Seq(
 "mercedes" -> "Mercedes",
 "audi" -> "Audi"
 )
 )
)

И это сделает это:

<select id="brand" name="brand">
 <optgroup label="Swedish Cars">
 <option value="volvo">Volvo</option>
 <option value="saab">Saab</option>
 </optgroup>
 <optgroup label="German Cars">
 <option value="mercedes">Mercedes</option>
 <option value="audi">Audi</option>
 </optgroup>
</select>


Посмотрите на помощника выбора в scala: https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/views/helper/select.scala.html

Нет никакого упоминания о optgroup, поэтому я думаю, что ответ отрицательный. В любом случае, вы можете создать собственный помощник, скопировав код и настроив его так, чтобы он интегрировал группы optgroups. Например, это мой код для моего пользовательского текста ввода. Мне пришлось удалить скрытый язык i18n из-за ошибки:

@(field: play.api.data.Field, args: (Symbol,Any)*)(implicit handler: views.html.helper.FieldConstructor)

@inputType = @{ args.toMap.get('type).map(_.toString).getOrElse("text") }
@inputClass = @{ args.toMap.get('class).map(_.toString) }

@helper.input(field, args.filter(_._1 != 'type).filter(_._1 != 'class):_*) { (id, name, value, htmlArgs) =>
 
}

licensed under cc by-sa 3.0 with attribution.