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.