簡體   English   中英

播放框架中 scala 模板中的變量

[英]Variable within scala template in play framework

我需要能夠聲明變量,並且在稍后進行一些標記后,我需要引用它們。 為了做到這一點,這是我的 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

我很好奇,所以做了一些挖掘。 請參閱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 有什么期望:)

您可以只使用 for 理解:

@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>}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM