Подтвердить что ты не робот

Создание настраиваемого конструктора полей в 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, и ее документы новы, поэтому я не уверен, что невероятно очевидная вещь, которую я пропускаю.

спасибо!

4b9b3361

Ответ 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