2011-10-27 75 views

回答

21

play 2.0中的模板引擎直接來自play 1.0 scala模塊。如果您仍然想知道Scala這樣的功能語言帶來了什麼好處,那麼這當然是它發光的領域之一。

示範:

斯卡拉語法標記不是別的,只是一個函數調用。有趣的是,html片段本身被認爲是函數,允許最強大的替換結構。

讓我們定義一個名爲mytag.scala.html一個HTML頁面

文件:應用程序/視圖/ mytags/mytag.scala.html

@(level:String = "error", index: Int)(body: (String) => Html) 

@level match { 

    case "success" => { 
     <p class="success" index="@index"> 
      @body("green") 
     </p> 
    } 

    case "warning" => { 
     <p class="warning" index="@index"> 
      @body("orange") 
     </p> 
    } 

    case "error" => { 
     <p class="error" index="@index"> 
      @body("red") 
     </p> 
    }  
} 

上面的標籤發生在2個不同的3個參數參數組:

  1. A級,用字符串表示(默認爲 「錯誤」)
  2. 索引
  3. 最後是一個名爲body的函數,它接受一個字符串參數並返回HTML代碼。請注意,主體是在其自己的參數組中定義的。它相當於我們在j2ee中知道的jsp片段

現在,讓我們看看如何使用這個標籤:

@import views.mytags._ 

@mytag("error",2) { color => 
    Oops, something is <span style="color:@color">wrong</span> 
} 

之前,我們可以用一個標籤(或功能),我們需要讓玩家知道它位於何處:這的目的進口聲明。請注意,只要您調整導入位置,標記文件的位置(路徑)就無關緊要,就像使用Java包一樣。

跟隨呼叫本身,這是很簡單的。但請注意,我們正在將參數化的html片段傳遞給標記。

對於進一步的細節,你會發現在這個URL

斯卡拉模板文件玩2.0最終會與自己的文檔。

4

完全不必要的答案,但只是爲了訓練我的Scala。 在保持清醒的情況下,這不會起作用嗎?

@(level:String = "error", index: Int)(body: (String) => Html) 

<p class="@level" index="@index"> 
    @body(
     @level match { 
     case "success" => "green" 
     case "warning" => "orange" 
     case "error" => "red" 
     } 
    ) 
</p> 
+0

我真的不知道,不是scala專家呢。在SO上看起來像個好問題。 –

+0

我應該很快重試play2.0。上次,我的實驗真的太生了!我不是Scala的專家,但我學到了很多,這是迄今爲止唯一的語言,給我的印象是我最終可以關閉Java;) – mandubian

+0

在這種情況下,如果level是除成功之外的其他任何東西,警告或者錯誤,你會得到那個css類的ap標籤,這個css類可能不會被注入。在@Olivier Refalo的回答中,只有符合其中一個錯誤級別的P標籤纔會被打印出來。 – user3001

0

我得到一個編譯器錯誤,當我使用第一個例子。刪除「視圖」。在導入時解決了問題

使用@import mytags。_

完整的示例(http://www.playframework.com/documentation/2.1.1/JavaTemplateUseCases):

Let’s write a simple views/tags/notice.scala.html 
tag that displays an HTML notice: 

@(level: String = "error")(body: (String) => Html) 

@level match { 

    case "success" => { 
    <p class="success"> 
     @body("green") 
    </p> 
    } 

    case "warning" => { 
    <p class="warning"> 
     @body("orange") 
    </p> 
    } 

    case "error" => { 
    <p class="error"> 
     @body("red") 
    </p> 
    } 

} 

現在讓我們用它從另一個模板:

@import tags._
@notice( 「錯誤」){顏色=>糟糕,有些東西是錯誤的}