2011-07-06 85 views
4

我需要能夠聲明變量,並且在稍後我需要引用它們的某些標記之後。爲了做到這一點,這是 簡化我的斯卡拉模板的版本:播放框架中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> 
} 

是上述有效斯卡拉模板,如果不是我怎麼可以聲明巴茲和標記後 參考呢? 我正在使用1.2.2RC2和斯卡拉0.9.1

+0

不是一個答案,而是一個提示:檢查tmp /,從您的模板生成的scala代碼存在那裏(在一個子目錄中 - 我沒有Scala項目方便檢查)。通常很有幫助,看看究竟發生了什麼:) – cdegroot

回答

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 
} 

這是處理這是一個非常實用的方法,但後來,你在斯卡拉:)

+0

也許它比這個答案更新,但現在Play中有一個「定義」功能,它正是這樣做的。 – jsalvata

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

相關問題