2013-05-18 49 views
0

我是一位最近開始瞭解Play框架的Java開發人員。我一直試圖讓下面的模板工作,但似乎無法得到它。我已經得到了我的Scala模板Scala模板中的HTML屬性

@navItem(label: String, link1: String) = { 
    @{if (Application.isAuthenticated()) { 
    <li class="active"> 
     <a href="@link1">label</a> 
    </li> 
    } 
    else { 
    <li class="disabled"> 
     <a href="@link1">{label}</a> 
    </li> 
    } 
    } 
} 

我打電話我的模板稍後像下面這樣

<ul class="nav"> 
@navItem("Search Documents", "/search") 
</ul> 

生成的鏈接有HREF作爲localhost:9000/@link1而不是localhost:9000/search。我不知道發生了什麼事。

PS:如果我改變我的模板如下,它工作正常。但我想了解爲什麼上述模板不會工作。

@navItem(label: String, link1: String) = { 
    <li class="@(if (Application.isAuthenticated()) "active" else "disabled")"> 
     <a href="@link">@label</a> 
    </li> 
} 

回答

4

不太清楚這一點,但我的猜測是以下內容:@{ ... }表示動態語句的開始和它的所有內容將被視爲Scala代碼。因此,這是一個正常的具有兩個字符串的if條件,因此兩者都只是在模板中返回。

爲什麼你將它標記爲多行代碼塊呢?你是否嘗試過這樣? (注意在第二個@符號後缺失的大括號):

@navItem(label: String, link1: String) = { 
    @if(Application.isAuthenticated()) { 
    <li class="active"> 
     <a href="@link1">@label</a> 
    </li> 
    } else { 
    <li class="disabled"> 
     <a href="@link1">@label</a> 
    </li> 
    } 
} 
+0

工作正常。第二個花括號是問題。另外在if和newline之前的空格在Eclipse中給出錯誤。謝謝!! – aniruddhc