2012-05-01 22 views
20

Estoy intentando asimilar las instrucciones dadas in the play 2 scala tutorial para ayudantes de plantilla de formulario. Me estoy quedando atrapado en la sección "Escribir tus propios constructores de campo". Da una plantilla de muestra (sin decir cuál debe ser el nombre del archivo):Creando un constructor de campo personalizado en Play 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> 

A continuación se muestra el código:

object MyHelpers { 
    implicit val myFields = FieldConstructor(myFieldConstructorTemplate.f)  
} 

Estoy confundido acerca de cómo esto se supone que se refieren a la modelo. (por ejemplo, ¿se supone que el archivo de la plantilla se llama myFieldConstructorTemplate.scala.html?) Probé algunas variaciones sin suerte.

Soy nuevo en Scala y Play, pero también sé jugar 2 y sus documentos son nuevos, así que no estoy seguro de qué cosa tan obvia me falta.

gracias!

+0

Ha intentado llamándolo 'myFieldConstructorTemplate.scala.html'? Porque así es como debería funcionar, hasta donde yo sé. –

+0

https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/views/helper/twitterBootstrap/package.scala - Veo este archivo que podría ser de ayuda entiendo inicializando el constructor de campo – asyncwait

Respuesta

9

En el tutorial de este código es a lo largo del texto:

A menudo, usted tendrá que escribir su propio constructor de campo. Para empezar, escribir una plantilla como:

Esto significa que usted tiene que crear su propia plantilla (xxxx.scala.html) y añadir que el código dentro. Después de eso, se importa en su plantilla con el código que proporcionan (recuerde que debe añadir que a cada plantilla Scala que utiliza su campo personalizado):

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

Compruebe las muestras de Juego, la muestra Formas utiliza un enfoque similar con Twitter bootstrap

+0

Hmm, esto fue lo primero que intenté y no funcionó. Typo, tal vez? Voy a darle otra oportunidad. ¡Gracias! –

+1

Docs para 2.4 sugieren 'implicit val myFields = FieldConstructor (html.xxxx.f)'. Creé 'xxxx.scala.html' en el directorio' views' con mis otras plantillas, por lo que necesitaba 'implicit val myFields = FieldConstructor (views.html.xxxx.f)'. –

16

acabo de tener el mismo problema, estoy de acuerdo con que la documentación no está claro en absoluto ...

de error Posible 1

not found: value FieldConstructor 

Esto significa que usted no tiene importado el ayudante con esta instrucción:

@import helper._ 

de error Posible 2

not found: value implicitConstructor 

Significa que está declarando el constructor de campo en el lugar incorrecto en su plantilla (es decir : en el método @helper.form). Para solucionar este problema, declaré mi constructor de campo justo después de mis instrucciones de importación:

@import form._ 
@import helper._ 

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

(Mi archivo foundation_field.scala.html está en el paquete views.form).

-1

seguir la lógica de Scala Palabra clave implícita, el documento está implícita también;)

Scala y el juego son demasiado inmaduros en este momento, por eso la documentación es muy pobre.

Esta respuesta SOF es muy buena: https://stackoverflow.com/a/15268122/1163081

También puede comprobar la fuente de reproducción para más ejemplos: https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/views/html/

O estos chicos parece descubrir la solución: https://groups.google.com/forum/#!msg/play-framework/2e1EqZJ-Qks/gXD1oo0IjfcJ

Cuestiones relacionadas