2012-05-01 3 views
20

Ich versuche, die Anweisungen in the play 2 scala tutorial für Formularvorlagenhelfer zu finden. Ich stehe im Abschnitt "Eigene Feldkonstrukteure schreiben" fest. Es gibt eine Vorlage Probe (ohne zu sagen, was der Name der Datei sein sollte):Erstellen eines benutzerdefinierten Feldkonstruktors 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> 

Dann ist es diesen Code zeigt:

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

Ich bin verwirrt darüber, wie diese soll auf die beziehen Vorlage. (zB soll die Template-Datei myFieldConstructorTemplate.scala.html heißen?) Ich habe einige Varianten ohne Glück versucht.

Ich bin neu in beiden Scala und Play, aber ich weiß auch Play 2 und seine Dokumente sind neu, so dass ich nicht sicher bin, was unglaublich offensichtlich, was ich vermisse.

danke!

+0

Haben Sie versucht, es ruft 'myFieldConstructorTemplate.scala.html'? Denn so soll es funktionieren, soweit ich weiß. –

+0

https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/views/helper/twitterBootstrap/package.scala - Ich sehe diese Datei, die helfen könnte verstehe initialisieren Feld Konstruktor – asyncwait

Antwort

9

Im Tutorial dieser Code entlang der Text ist:

Oft müssen Sie Ihre eigenen Feld Konstruktor schreiben. Beginnen Sie mit eine Vorlage zu schreiben wie:

Dies bedeutet, dass Sie Ihre eigene Vorlage zu erstellen haben (xxxx.scala.html) und fügen Sie innerhalb dieser Code. Danach werden Sie es in der Vorlage mit dem Code importieren sie liefern (denken Sie daran, dass Vorlage zu jedem scala hinzuzufügen, die Ihre benutzerdefinierten Feld verwendet):

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

Überprüfen Sie die Proben von Play, verwendet der Forms Probe einen ähnlichen Ansatz mit Twitter Bootstrap.

+0

Hmm, das war das erste, was ich versuchte und es hat nicht funktioniert. Tippfehler, vielleicht? Ich werde es noch einmal versuchen. Vielen Dank! –

+1

Docs für 2.4 vorschlagen 'implizite val myFields = FieldConstructor (html.xxxx.f)'. Ich habe 'xxxx.scala.html' im Verzeichnis' views' mit meinen anderen Templates erstellt, also brauchte ich 'implizite val myFields = FieldConstructor (views.html.xxxx.f)'. –

16

Ich habe gerade das gleiche Problem, ich stimme mit Ihnen die Dokumentation auf allen ...

Mögliche Fehler 1

not found: value FieldConstructor 

Es bedeutet, dass Sie nicht nicht klar ist, haben die Helfer mit dieser Anweisung importiert:

@import helper._ 

Mögliche Fehler 2

not found: value implicitConstructor 

Dies bedeutet, dass Sie den Feldkonstruktor an der falschen Stelle in Ihrer Vorlage deklarieren (d. H. : in der @ helper.form-Methode). Um dies zu beheben, erklärte ich meinen Acker Konstruktor nur nach meinem Import Anweisungen:

@import form._ 
@import helper._ 

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

(Meine foundation_field.scala.html Datei im views.form Paket ist).

-1

Um die Logik der Scala impliziten Schlüsselwort zu folgen, ist das Dokument auch implizit;)

Scala und Play ist jetzt zu unreif, aus diesem Grunde die Dokumentation sehr schlecht ist.

Diese SOF Antwort ist sehr gut: https://stackoverflow.com/a/15268122/1163081

Sie auch die Play-Quelle für weitere Beispiele überprüfen: https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/views/html/

Oder diese Jungs scheint die Lösung zu entdecken: https://groups.google.com/forum/#!msg/play-framework/2e1EqZJ-Qks/gXD1oo0IjfcJ