在Play2.0中创建一个用于生成@link的标签

问题描述:

同时积极学习Play2.0我坚持创建标签。在示例应用程序,即所谓的计算机数据库,在列表模板创建下面的帮助:在Play2.0中创建一个用于生成@link的标签

@**************************************** 
* 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) 
} 

但是,很明显这是不工作,我不知道为什么它不工作。

感谢您的意见。

使用答案UPDATE:

所以我们要定义,就像在Java中Scala的模板,传递给这种观点(注参数:那你会在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) 
} 

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

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

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