Вопрос по playframework-2.0 – Создание собственного конструктора поля в Play 2 (scala)

21

Я пытаюсь выполнить инструкциив игре 2 скала учебник для помощников шаблона формы. Я застреваю в разделе «Написание собственных конструкторов полей». Он дает образец шаблона (не говоря, каким должно быть имя файла):

<code>@(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>
</code>

Затем он показывает этот код:

<code>object MyHelpers {
  implicit val myFields = FieldConstructor(myFieldConstructorTemplate.f)    
}
</code>

Я запутался в том, как это должно относиться к шаблону. (например, должен ли файл шаблона называться myFieldConstructorTemplate.scala.html?) Я попробовал некоторые варианты этого без удачи.

Я новичок как в scala, так и в Play, но я также знаю, что play 2 и его документы новые, поэтому я не уверен, что невероятно очевидная вещь, которую я пропускаю.

Спасибо!

github.com/playframework/Play20/blob/master/framework/src/play/… - Я вижу этот файл, который может помочь понять конструктор инициализации поля asyncwait
Вы пытались назвать этоmyFieldConstructorTemplate.scala.html? Потому что так оно и должно работать, насколько я знаю. Leonard Punt

Ваш Ответ

3   ответа
10

Often you will need to write your own field constructor. Start by writing a template like:

Это означает, что вы должны создать свой собственный шаблон (xxxx.scala.html) и добавить этот код внутри. После этого вы импортируете его в свой шаблон с кодом, который они предоставляют (не забудьте добавить его в каждый шаблон scala, который использует ваше настраиваемое поле):

@implicitField = @{ FieldConstructor(xxxx.f) }

Проверьте примеры Play, пример Forms использует аналогичный подход с загрузкой Twitter.

Error: User Rate Limit Exceeded Bjorn Roche
Error: User Rate Limit Exceededimplicit val myFields = FieldConstructor(html.xxxx.f)Error: User Rate Limit Exceededxxxx.scala.htmlError: User Rate Limit ExceededviewsError: User Rate Limit Exceededimplicit val myFields = FieldConstructor(views.html.xxxx.f).
17

я согласен с вами, документация вообще не ясна ...

Possible error 1

not found: value FieldConstructor

Это означает, что вы не импортировали помощника с этой инструкцией:

@import helper._

Possible error 2

not found: value implicitConstructor

Это означает, что вы объявляете конструктор поля не в том месте вашего шаблона (т.е. в методе @ helper.form). Чтобы это исправить, я объявил свой конструктор поля сразу после инструкций по импорту:

@import form._
@import helper._

@implicitConstructor = @{ FieldConstructor(foundation_field.render) }

(Мой файл foundation_field.scala.html находится в пакете views.form).

0

документ тоже неявный;)

Scala и Play сейчас слишком незрелые, поэтому документация очень скудная.

Этот ответ SOF очень хорош:https://stackoverflow.com/a/15268122/1163081

Вы также можете проверить источник Play для большего количества примеров: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

Похожие вопросы