在Play2.0中创建用于生成@link的标记

时间:2012-04-24 18:27:25

标签: scala playframework-2.0

在积极学习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)
}

1 个答案:

答案 0 :(得分:1)

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

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

如果您想复制粘贴此代码,请不要忘记开头括号前的前导@