2012-08-24 5 views
7

ist es möglich, generische Vorlagen zu erstellen?Java Play2 - Generische Vorlagen?

Pseudo-Code:

@(myForm: Form[T]) 

So kann ich sie so wieder verwenden:

@inputText(
       myForm("title"), 
       '_label -> "title" 

      ) 
  • Wenn ja, Wie kann ich es tun?

Antwort

9

Verwenden Sie die Magie unterstreichen, dass für:

@(form: Form[_]) 

Dies ist eine existenzielle Art in Scala genannt wird, bedeutet in etwa „gibt es einen Typ-Parameter, aber ich interessiere mich nicht, was es ist“.

+0

Ich schätze in Scala heißt alles "Magie": D. Danke, das hat mein Problem gelöst. –

+0

Aber mir ist egal, was der Typ ist! Gibt es eine Möglichkeit, 'Form [_ extends MyAbstractForm]' zu implementieren? – Matthew

2

Haben Sie es versucht?

im app/views Paket erstellen neue vies: pseudo.scala.html

@(someParam: String) 
<h1>This is my pseudo template</h1> 
<div>And there is some param: <b>@someParam</b></div> 

dann in jeder anderen Ansicht Sie es wie folgt verwenden können:

... 
<div>@pseudo("param pam pam")</div> 
... 

Natürlich Ihre param (n) nicht brauchen nur String sein, so dass Sie dort gehen können, Form[T], List[T], oder was auch immer.

+0

Nein dachte ich so etwas wie dies: '@ (myForm: Form [T]) 'und benutze es in der Steuerung ->' ok (form.render (userform)) oder ok (form.render (commentform)) ' –

+0

Ach, du willst Form eines beliebigen Typs verwenden .. Versuchen Sie die Marius 'Lösung, dann ist in Scala Unterstreichung eine Art Platzhalter, wie Sternchen in anderen Sprachen. – biesior

+0

Es ist entweder ein Wildcard oder es heißt "Es ist mir egal". –

4

Ich mag nicht die @(form: Form[_]) Ansatz wie es ist, wirft Typ Sicherheit aus dem Fenster.

Wenn Sie ok(form.render(userform)) übergeben, erhalten Sie keine Hilfe vom Compiler, wenn Sie @form("lastNme") in Ihrer Vorlage, aber Sie erhalten einen Laufzeitfehler, wenn nicht während des Testens gefangen.

Was ich mache, ist die Bereitstellung einer Schnittstelle (oder Merkmal in Play 2 Scala) für gängige Formulare (z. B. Registrierung von Mitgliedern und Konferenzregistrierung oder Liga-Statistiken und Team-Statistiken, etc.); Auf diese Weise werden zum Zeitpunkt der Kompilierung Fett-Tippfehler und Ähnliches abgefangen.

Ja, mehr vorformulierten mit, zu behandeln, sondern von der dynamischen Sprache Seite des Zauns kommen, desto weniger muss ich mit Laufzeitfehlern umgehen, desto besser ...

+0

+2 Volle Übereinstimmung – biesior