我需要能够声明变量并在稍后标记之后我 需要参考它们。为了实现这一点,这是 我的scala模板的简化版本:
@(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>
}
上面是有效的scala模板,如果不是,我怎么能声明baz和 稍后在标记中引用它? 我使用的是1.2.2RC2和scala 0.9.1
答案 0 :(得分:8)
我很好奇所以做了一些挖掘。见https://groups.google.com/forum/#!topic/play-framework/Mo8hl5I0tBQ - 目前没有办法,但展示了一个有趣的解决方法。定义utils / Let.scala:
package utils
Object Let {
def let[A,B](a:A)(f:A=>B):B = f(a)
}
然后
@import utils.Let._
@let(2+3){ answer =>
@answer <hr> @answer
}
这是一种非常实用的处理方式,但是,你在Scala中的期望是什么:)
答案 1 :(得分:3)
你可以用一个来理解:
@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>
}
...如果你没有任何东西需要循环,你可以说@for(i <- List(1); <declare variables>){<html here>}