2012-10-24 1 views
19

Je passe à un modèle un objet Event et ce que j'ai besoin de faire est de vérifier la valeur @event.getSeverity. Si la valeur est positive, je veux colorier un <div> en vert. si la valeur est négative, je veux colorier un <div> en rouge.Jouez! framework: définir une variable dans le template?

Je ne pouvais pas trouver un moyen de définir une variable. c'est possible? ça devrait être je pense.
de toute façon, quelle est la manière la plus simple d'accomplir cela?

grâce

+1

double possible de [déclarer les variables dans un modèle scala Play2] (http://stackoverflow.com/questions/12031146/declare-variable-in-a-play2-scala-template) – pathikrit

Répondre

41

Comme indiqué dans le Play documentation vous pouvez utiliser l'aide @defining.

@defining(if (event.getSeverity > 0) "green" else "red") { color => 
    <div style="background-color: @color">foo</div> 
} 

Ou vous pouvez utiliser un reusable block

@severityColor(event: Event) = @{ 
    if (event.getSeverity > 0) "green" else "red" 
} 

<div style="background-color: @severityColor(event)">foo</div> 
+0

génial. Merci beaucoup! – socksocket

+1

Notez que le bloc réutilisable est exécuté à chaque fois. Cela peut rendre impossible l'inclusion de données qui doivent être calculées. Mais étant donné que la définition peut être désordonnée, vous pouvez envisager de créer un bloc réutilisable qui génère les données lors de la première exécution et utilise la copie mise en cache dans le futur. Cependant, cela complique les blocs réutilisables. Espérons qu'une version future de Play le rendra plus propre à définir des variables. – Mike

+0

Cela signifie-t-il vraiment que le compilateur de modèle ne permettra pas simplement de placer le code scala dans l'attribut html 'style'? – matanster

8

essayer dans le modèle scala

@import java.math.BigInteger; var i=1; var k=1 

et chaîne

@import java.lang.String; val name="template" 

dans l'aspect de la question

@import java.lang.String; var color="red" 
@if(event.getSeverity>0){ 
@{color="green"} 
} 
<div style="background-color: @color">foo</div> 
+2

très bien! À l'intérieur du modèle, vous pouvez changer la variable '@ {i = 5}' – myborobudur

+0

Comment cela fonctionnerait-il réellement? – matanster

+1

@matt check this http://stackoverflow.com/questions/12031146/declare-variable-in-a-play2-scala-template/21397683#21397683 –

8

Un autre variant. Fonctionne bien si déclaré après la section d'importation. Dans le cas contraire peut provoquer des erreurs ("valeur not found")

@import play.i18n.Messages 
@import models.Customers 

@customers = @{Customers.allAccepted()} 

... 

@if(customers.size()>0) { 
    <ul> 
     @for(customer <- customers) { 
      <li> 
       <a href="/filters/customer/@customer.id">@customer.name</a> 
      </li> 
     } 
    </ul> 
} 
1

" pour" compréhensions peut être aussi quelques fois utile:
@for(id <- products.keys; product = products(id); author = product.author.getOrElse("N/A")) {... @product.name ... @author

Questions connexes