Создание настраиваемого конструктора полей в Play 2 (scala)
Я пытаюсь выполнить инструкции в учебнике 2 scala для помощников шаблонов форм. Я застрял в разделе "Написание собственных конструкторов полей". Он дает образец шаблона (без указания имени файла):
@(elements: helper.FieldElements)
<div class="@if(elements.hasErrors) {error}">
<label for="@elements.id">@elements.label</label>
<div class="input">
@elements.input
<span class="errors">@elements.errors.mkString(", ")</span>
<span class="help">@elements.infos.mkString(", ")</span>
</div>
</div>
Затем он показывает этот код:
object MyHelpers {
implicit val myFields = FieldConstructor(myFieldConstructorTemplate.f)
}
Я смущен тем, как это должно относиться к шаблону. (например, это файл шаблона, который должен быть называться myFieldConstructorTemplate.scala.html?) Я попробовал некоторые варианты этого без везения.
Я новичок как в scala, так и в Play, но я также знаю игру 2, и ее документы новы, поэтому я не уверен, что невероятно очевидная вещь, которую я пропускаю.
спасибо!
Ответы
Ответ 1
В учебнике этот код находится по тексту:
Часто вам нужно написать свой собственный конструктор полей. Начать с написав шаблон, например:
Это означает, что вам нужно создать свой собственный шаблон (xxxx.scala.html
) и добавить этот код внутри. После этого вы импортируете его в свой шаблон с кодом, который они предоставляют (не забудьте добавить это к каждому шаблону scala, который использует ваше настраиваемое поле):
@implicitField = @{ FieldConstructor(xxxx.f) }
Проверьте образцы Play, образец Forms использует аналогичный подход с загрузкой Twitter.
Ответ 2
У меня была такая же проблема, я согласен с вами, документация не совсем понятна...
Возможная ошибка 1
not found: value FieldConstructor
Это означает, что вы не импортировали помощника с этой инструкцией:
@import helper._
Возможная ошибка 2
not found: value implicitConstructor
Это означает, что вы объявляете конструктор поля в неправильном месте вашего шаблона (т.е. в методе @helper.form). Чтобы исправить это, я объявил свой конструктор полей сразу после моих инструкций по импорту:
@import form._
@import helper._
@implicitConstructor = @{ FieldConstructor(foundation_field.render) }
(Файл my foundation_field.scala.html находится в пакете views.form).
Ответ 3
Чтобы следовать логике неявного ключевого слова Scala, документ тоже неявный;)
Scala и Play слишком незрелые прямо сейчас, поэтому документация очень плохая.
Этот ответ SOF очень хорош: fooobar.com/info/259220/...
Вы также можете проверить источник воспроизведения для получения дополнительных примеров: https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/views/html/
Или эти ребята, похоже, обнаруживают решение: https://groups.google.com/forum/#!msg/play-framework/2e1EqZJ-Qks/gXD1oo0IjfcJ