我想在另一个文件中放置一些辅助函数,因为它们会被过度重用。我拿了Computer-Databse样本的列表文件:
我在app / views包下创建了一个名为“listing.scala.html”的新文件,并将@link函数从原始文件移到了它。这个新文件如下所示:
@(currentSortBy: String, currentOrder: String, currentFilter: String)
@****************************************
* 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
routes.Application.listPerfil(newPage, sortBy, order, currentFilter)
}
所以,在我的原始文件中,我用这个替换了@link调用:
<a href="@listing(currentSortBy, currentOrder, currentFilter).link(0, key)">@title</a>
问题是,当我尝试编译时,我得到了这个错误:
value link is not a member of play.api.templates.Html
但是根据文档(http://www.playframework.org/documentation/2.0.4/ScalaTemplateUseCases),似乎没问题。
有什么猜测吗?
答案 0 :(得分:1)
Play的模板不是放置高级条件的最佳位置,很可能通过在某些控制器(或其他方法)中处理它会获得更好的灵活性,这将只返回您所需的链接
即:
<a href="@controllers.Application.link(currentSortBy, currentOrder, currentFilter, 0, key)">@title</a>
在您的情况下,link(...)
Application
函数的A
函数也可以返回反向路径。
请记住,包含其他模板是重复HTML块的最佳选择,但有时很难获得指定的字符串(主要是因为没有修剪空格)。如您所见,调用嵌套函数也存在问题。很可能你可以在listing.scala.html
中生成整个{{1}}标签但是使用它不够舒服(恕我直言)。