Scala 在正在使用的模板调用中将函数作为参数调用
游戏中/斯卡拉;我不明白这为什么不能编译:Scala 在正在使用的模板调用中将函数作为参数调用,scala,templates,playframework,twirl,play-templates,Scala,Templates,Playframework,Twirl,Play Templates,游戏中/斯卡拉;我不明白这为什么不能编译: @(tabNames: Seq[String]) @isActive(idx: Int) = { @if(idx < 1) { "active" } else { "" } } <ul class="nav nav-tabs"> @for((tab, idx) <- tabNames.zipWithIn
@(tabNames: Seq[String])
@isActive(idx: Int) = {
@if(idx < 1) {
"active"
} else {
""
}
}
<ul class="nav nav-tabs">
@for((tab, idx) <- tabNames.zipWithIndex) {
@views.html.generic.navLi("tab" + idx.toString, tab, isActive(idx))
}
</ul>
@(选项卡名:Seq[String])
@isActive(idx:Int)={
@if(idx<1){
“活动”
}否则{
""
}
}
@对于((tab,idx);虽然在twirl模板中声明“函数”肯定是可能和有用的,但返回类型似乎(有效地)被锁定为
Html
——即您的“块”(如文档中所述)必须呈现Html。
正如文档中所建议的,最快的解决方案是将逻辑重新定位到Scala类中;对于像这样简单的事情,对象
是实现这一点的最简单方法,即:
package views
object ViewHelper {
def isActive(idx: Int):String = {
if(idx < 1) {
"active"
} else {
""
}
}
}
包视图
对象视图辅助对象{
def isActive(idx:Int):字符串={
if(idx<1){
“活动”
}否则{
""
}
}
}
以及:
@for((tab,idx)对
- 可重用代码块
- 可重用的纯代码块
注意这两种语言在
@
用法上的细微差别
@isActive(idx: Int) = {
@if(...
@isActive(idx: Int) = @{
if(...
可重用纯代码块可以具有任意返回类型。在您的情况下,要将String
作为返回类型,您可以编写:
@isActive(idx: Int) = @{
if(idx < 1) {
"active"
} else {
""
}
}
@isActive(idx:Int)=@{
if(idx<1){
“活动”
}否则{
""
}
}
是-文档对这个主题肯定很轻松。您确定视图
包是放置此对象的最佳位置吗
?我还注意到您没有导入视图帮助程序
-是这样吗?谢谢,将其放置在视图中
我不需要导入它:-)
@isActive(idx: Int) = @{
if(idx < 1) {
"active"
} else {
""
}
}