Il n'y a pas beaucoup de documentation sur le moteur de template Play 2.0.Comment définir un tag avec Play 2.0?
Comment créer une étiquette à l'aide du modèle Scala?
Il n'y a pas beaucoup de documentation sur le moteur de template Play 2.0.Comment définir un tag avec Play 2.0?
Comment créer une étiquette à l'aide du modèle Scala?
Le moteur de gabarit en jeu 2.0 provient directement du module scala de lecture 1.0. Si vous vous demandez encore quels avantages un langage fonctionnel tel que Scala apporte à l'image, bien c'est certainement l'un des domaines où il brille.
Démonstration:
Dans la syntaxe scala une balise est rien d'autre qu'un appel de fonction. Ce qui est intéressant, c'est que les fragments html sont considérés comme des fonctions elles-mêmes, permettant les constructions de substitution les plus puissantes.
Définissons une page html appelée mytag.scala.html
fichier: apps/vues/mytags/mytag.scala.html
@(level:String = "error", index: Int)(body: (String) => Html)
@level match {
case "success" => {
<p class="success" index="@index">
@body("green")
</p>
}
case "warning" => {
<p class="warning" index="@index">
@body("orange")
</p>
}
case "error" => {
<p class="error" index="@index">
@body("red")
</p>
}
}
La balise ci-dessus prend 3 paramètres 2 distincts groupes de paramètres:
Maintenant, nous allons voir comment nous pouvons utiliser cette balise:
@import views.mytags._
@mytag("error",2) { color =>
Oops, something is <span style="color:@color">wrong</span>
}
Avant de pouvoir utiliser une balise (ou la fonction), nous devons laisser le jeu savoir où il se trouve: c'est le but de la déclaration. Notez que l'emplacement (le chemin) du fichier de balise n'est pas pertinent tant que vous ajustez l'emplacement d'importation, tout comme avec les packages Java. Suit l'appel lui-même, ce qui est assez simple. Notez cependant que nous passons un fragment html paramétré à l'étiquette.
Pour plus de détails, vous pouvez trouver la documentation du modèle de scala à ce URL
Jouer 2.0 finira par venir avec sa propre documentation.
Réponse totalement inutile mais juste pour former ma scala. Cela ne fonctionnerait-il pas et serait plus court tout en restant clair?
@(level:String = "error", index: Int)(body: (String) => Html)
<p class="@level" index="@index">
@body(
@level match {
case "success" => "green"
case "warning" => "orange"
case "error" => "red"
}
)
</p>
Je reçois une erreur de compilation, lorsque j'ai utilisé le premier exemple. Supprimez les "vues". dans l'importation résolu le problème
utilisez @import mytags._
Exemple complet (http://www.playframework.com/documentation/2.1.1/JavaTemplateUseCases):
Let’s write a simple views/tags/notice.scala.html tag that displays an HTML notice: @(level: String = "error")(body: (String) => Html) @level match { case "success" => { <p class="success"> @body("green") </p> } case "warning" => { <p class="warning"> @body("orange") </p> } case "error" => { <p class="error"> @body("red") </p> } }
Et maintenant, nous allons l'utiliser à partir d'un autre modèle:
@import tags._
@notice ("erreur") {color => Oups, quelque chose ne va pas}
Honnêtement, je ne sais pas, pas encore un expert en scala. ressemble à une bonne question sur SO. –
Je devrais réessayer play2.0 bientôt. La dernière fois, c'était vraiment trop dur pour mes expériences! Je ne suis pas encore un expert de Scala mais j'apprends beaucoup et c'est le seul langage jusqu'à présent qui me donne l'impression que je pourrais définitivement éteindre Java à la fin;) – mandubian
Dans ce cas, si le niveau est autre que le succès, avertissement ou erreur, vous aurez une balise AP avec cette classe CSS, qui pourrait ne pas être induite. Dans la réponse de @Olivier Refalo, une étiquette P seulement sera imprimée si elle correspond à l'un des niveaux d'erreur. – user3001