在积极学习Play2.0的同时,我仍然坚持创建一个标签。在名为computer-database的示例应用程序中,在列表模板中创建了以下帮助程序:
@****************************************
* Helper generating navigation links *
****************************************@
@link(newPage:Int, newSortBy:String) = @{
var sortBy = currentSortBy
var order = currentOrder
if(newSortBy != null) {
sortBy = newSortBy
if(currentSortBy == newSortBy) {
if(currentOrder == "asc") {
order = "desc"
} else {
order = "asc"
}
} else {
order = "asc"
}
}
// Generate the link
controllers.orders.routes.Work.list(newPage, sortBy, order, currentFilter)
}
由于我想在视图模板中使用这个帮助器,我认为最好的解决方案是为它创建一个标签。所以我做了以下(在我的标签包中):
@(newPage : Int, newSortBy:String) {
var sortBy = currentSortBy
var order = currentOrder
if(newSortBy != null) {
sortBy = newSortBy
if(currentSortBy == newSortBy) {
if(currentOrder == "asc") {
order = "desc"
} else {
order = "asc"
}
} else {
order = "asc"
}
}
// Generate the link
controllers.orders.routes.Computer.list(newPage, sortBy, order, currentFilter)
}
但是,显然这不起作用,我不知道它在哪里或为什么不起作用。
感谢您的投入。
更新答案:
因此,在Scala模板中,我们必须像在Java中一样定义传递给此视图的参数(注意:您将在javascript中使用的变量也必须传递!)。该模板将编译为the documentation中所述的方法。
工作标签如下:
@(newPage : Int, newSortBy : String, currentSortBy: String, currentOrder: String, currentFilter : String ) @{
var sortBy = currentSortBy
var order = currentOrder
if(newSortBy != null) {
sortBy = newSortBy
if(currentSortBy == newSortBy) {
if(currentOrder == "asc") {
order = "desc"
} else {
order = "asc"
}
} else {
order = "asc"
}
}
// Generate the link
controllers.orders.routes.Work.list(newPage, sortBy, order, currentFilter)
}
答案 0 :(得分:1)
诀窍是第一个版本使用template syntax允许编写Scala代码而不是HTML:@{ val scalaVal = 42}
。
在您的代码中,模板引擎会将您的代码解释为HTML。
如果您想复制粘贴此代码,请不要忘记开头括号前的前导@
。