处理Scala播放模板中的选项
我正在尝试在Scala播放模板中引用option类型的内容。我一直在尝试使用此资源: 这就是我试图引用case类中的字段的方式:处理Scala播放模板中的选项,scala,playframework,playframework-2.0,playframework-2.1,Scala,Playframework,Playframework 2.0,Playframework 2.1,我正在尝试在Scala播放模板中引用option类型的内容。我一直在尝试使用此资源: 这就是我试图引用case类中的字段的方式: @{optionalobject ?. field} 它不起作用,这是我得到的错误: ';' expected but '.' found. 我不确定为什么会出现这个错误 从您的标签判断,您使用的是Play 2.x变体,但您引用的是Play 1.x模块的文档 假设你的类型匹配,我相信你想要的是: @optionalobject.getOrElse(field)
@{optionalobject ?. field}
它不起作用,这是我得到的错误:
';' expected but '.' found.
我不确定为什么会出现这个错误 从您的标签判断,您使用的是Play 2.x变体,但您引用的是Play 1.x模块的文档 假设你的类型匹配,我相信你想要的是:
@optionalobject.getOrElse(field)
对于可以跨多行的稍微好一点的格式(如果需要): 如果未定义字段,则不想显示任何内容:
@for(o <- optionalObject) {
@o.field
}
(o的另一种可能性是使用map,我更喜欢这种语法与HTML混合使用
@pagination.next.map { next =>
<a href="@Routes.paginated(next)">
@HtmlFormat.escape("Next >>>")
</a>
}
@pagination.next.map{next=>
}
有时,在处理选项时,编写一个简短的帮助程序来分离模板代码可能比较方便:
// Helper object is defined in some file Helper.scala
object Helper {
def maybeAttribute[T](attrName:String, maybeValue:Option[String]) =
maybeValue.fold("") { value =>
Html(attrName + "=" + value).toString()
}
}
然后模板可以直接使用这个助手方法,就像
// some view.scala.html file
<div @Helper.maybeAttribute("id",maybeId)>
</div>
//some view.scala.html文件
这不起作用。它是说该字段不存在。但是,它必须存在。当只输出case类时,它会显示case类的所有字段。@Lilluda5编辑您的问题并显示更多的代码。您如何声明optionalobject
和field
?用于显示的第二个代码段ng如果字段没有定义,用例很可爱。我一直在掩饰Option
是一种集合类型这一事实,允许您这样做。
// Helper object is defined in some file Helper.scala
object Helper {
def maybeAttribute[T](attrName:String, maybeValue:Option[String]) =
maybeValue.fold("") { value =>
Html(attrName + "=" + value).toString()
}
}
// some view.scala.html file
<div @Helper.maybeAttribute("id",maybeId)>
</div>