I need to be able to declare variables and after some markup later I need to reference them. In order to accomplish this, this is simplified version of my scala template:
@(map1:
java.util.LinkedHashMap[String,java.util.LinkedHashMap[String,Object]])
@import scala.collection.JavaConversions._
@import play.Logger
@for( (key,value) <- map1) {
<div>
@{
val rmap = Foo.someMethod(value)
val baz = rmap.getOrElse("baz", null)
<table border="0" cellpadding="0" cellspacing="0" >
<tbody>
<tr>
<td rowspan="3">
<div class="bar">
@baz
</div>
</td>
</tr>
</tbody>
</table>
}
</div>
}
Is above valid scala template and if not how can I declare baz and reference it later in the markup? I am using 1.2.2RC2 and scala 0.9.1
I was curious so did some digging. See https://groups.google.com/forum/#!topic/play-framework/Mo8hl5I0tBQ - there is no way at the moment, but an interesting work-around is shown. Define utils/Let.scala:
package utils
Object Let {
def let[A,B](a:A)(f:A=>B):B = f(a)
}
and then
@import utils.Let._
@let(2+3){ answer =>
@answer <hr> @answer
}
It's a very functional way of handling it, but then, what'd you expect in Scala :)
You can just use a for comprehension:
@for( (key,value) <- map1;
rmap = Foo.someMethod(value);
baz = rmap.getOrElse("baz", null)
) {
<div>
<table border="0" cellpadding="0" cellspacing="0" >
<tbody>
<tr>
<td rowspan="3">
<div class="bar">
@baz
</div>
</td>
</tr>
</tbody>
</table>
</div>
}
... and if you don't have anything you need to loop over, you can just say @for(i <- List(1); <declare variables>){<html here>}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With