1

在积极学习 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 中使用的变量也必须传递!)。该模板将编译为文档中所述的方法。

工作标签如下所示:

@(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)
}
4

1 回答 1

1

诀窍是第一个版本使用允许编写 Scala 代码而不是 HTML:的模板语法@{ val scalaVal = 42}

在您的标签中,模板引擎将您的代码解释为 HTML。

如果要复制粘贴此代码,请不要忘记@左大括号前的前导。

于 2012-04-24T20:50:25.673 回答