2012-10-24 18 views
19

Przechodzę do szablonu obiektu Event, a ja muszę sprawdzić wartość @event.getSeverity. jeśli wartość jest dodatnia, chcę pokolorować konkretny <div> na zielono. jeśli wartość jest ujemna, chcę pokolorować określony kolor na czerwono.Graj! framework: zdefiniować zmienną w szablonie?

Nie mogłem znaleźć sposobu na zdefiniowanie zmiennej. Czy to możliwe? to powinienem myśleć.
tak czy inaczej, jaki jest najprostszy sposób osiągnięcia tego?

dzięki

+1

Możliwy duplikat [Zadeklaruj zmienną w szablonie PLAY2 scala] (http://stackoverflow.com/questions/12031146/declare-variable-in-a-play2-scala-template) – pathikrit

Odpowiedz

41

Jak stwierdzono w Play documentation można użyć @defining pomocnika.

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

Albo można użyć reusable block

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

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

świetnie. na prawdę bardzo ci dziękuję! – socksocket

+1

Należy zauważyć, że blok wielokrotnego użytku jest uruchamiany za każdym razem. Może to być niepraktyczne w przypadku włączania danych, które należy obliczyć. Biorąc jednak pod uwagę, jak trudne może być definiowanie, można rozważyć utworzenie bloku do wielokrotnego użytku, który generuje dane przy pierwszym uruchomieniu i używa kopii z pamięci podręcznej w przyszłości. To jednak komplikuje bloki wielokrotnego użytku. Miejmy nadzieję, że przyszłe wersje Play sprawią, że czystsze będzie definiowanie zmiennych. – Mike

+0

Czy to naprawdę oznacza, że ​​kompilator szablonów nie pozwoli po prostu umieścić kod scala w atrybucie html 'style'? – matanster

8

spróbować tego w szablonie scala

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

i ciąg

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

w aspekcie zapytania

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

bardzo ładne! Wewnątrz szablonu możesz zmienić zmienną '@ {i = 5}' – myborobudur

+0

Jak to by działało? – matanster

+1

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

8

Inny wariant. Działa dobrze, jeśli zadeklarowano po sekcji importu. W przeciwnym razie może powodować pewne błędy („wartość nie znaleziono”)

@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

dla” listowe mogą być również użyteczne kilka razy:
@for(id <- products.keys; product = products(id); author = product.author.getOrElse("N/A")) {... @product.name ... @author

Powiązane problemy