2012-05-01 6 views
20

Sto tentando di inserire le istruzioni fornite in the play 2 scala tutorial per gli helper del modello di modulo. Mi sto bloccando nella sezione "Scrivi i tuoi costruttori di campo". Esso fornisce un modello di esempio (senza dire quello che il nome del file dovrebbe essere):Creazione di un costruttore di campo personalizzato in 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> 

Poi si vede questo codice:

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

Sono confuso su come questo dovrebbe riguardare la modello. (ad esempio, il file modello dovrebbe essere chiamato myFieldConstructorTemplate.scala.html?) Ho provato alcune varianti su questo senza fortuna.

Sono nuovo sia su scala che su Play, ma conosco anche Play 2 ei suoi documenti sono nuovi, quindi non sono sicuro di quale cosa incredibilmente ovvia mi manchi.

grazie!

+0

Hai provato definendolo 'myFieldConstructorTemplate.scala.html'? Perché è così che dovrebbe funzionare, per quanto ne so. –

+0

https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/views/helper/twitterBootstrap/package.scala - Vedo questo file che potrebbe essere di aiuto capire l'inizializzazione del costruttore di campo – asyncwait

risposta

9

Nel tutorial questo codice è lungo il testo:

Spesso si avrà bisogno di scrivere il proprio costruttore di campo. Inizia scrivendo un modello simile:

Questo significa che è necessario creare il proprio modello (xxxx.scala.html) e aggiungere che il codice all'interno. Dopo di che, l'importazione nel vostro modello con il codice che forniscono (ricordarsi di aggiungere che, per ogni modello di scala che utilizza il campo personalizzato):

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

Controllare i campioni del gioco, il campione Forms utilizza un approccio simile con il bootstrap di Twitter.

+0

Hmm, questa è stata la prima cosa che ho provato e non ha funzionato. Typo, forse? Darò un altro colpo. Grazie! –

+1

I documenti per 2.4 suggeriscono 'implicit val myFields = FieldConstructor (html.xxxx.f)'. Ho creato 'xxxx.scala.html' nella directory' views' con gli altri miei template, quindi avevo bisogno di 'implicit val myFields = FieldConstructor (views.html.xxxx.f)'. –

16

Ho appena avuto lo stesso problema, sono d'accordo con voi la documentazione non è chiaro a tutti ...

Possibile errore 1

not found: value FieldConstructor 

Vuol dire che non l'hai importato il helper con questa istruzione:

@import helper._ 

Possibile errore 2

Significa che si sta dichiarando il costruttore del campo nel posto sbagliato nel modello (ad es. : nel metodo @ helper.form). Per risolvere questo problema, ho dichiarato il mio costruttore di campo appena dopo le mie istruzioni di importazione:

@import form._ 
@import helper._ 

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

(Il mio file foundation_field.scala.html è nel pacchetto views.form).

-1

seguire la logica di Scala parola chiave implicita, il documento è implicita troppo;)

Scala e Play sono troppo immaturi in questo momento, per questo motivo la documentazione è molto povera.

Questa risposta SOF è molto buono: https://stackoverflow.com/a/15268122/1163081

è anche possibile controllare la sorgente di riproduzione per ulteriori esempi: https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/views/html/

Oppure questi ragazzi sembra scoprire la soluzione: https://groups.google.com/forum/#!msg/play-framework/2e1EqZJ-Qks/gXD1oo0IjfcJ

Problemi correlati