我正在尝试在Scala Play模板中引用类型选项。我一直在尝试使用此资源:http://www.playframework.com/modules/scala-0.9/templates
这就是我尝试引用案例类中的字段的方法:
@{optionalobject ?. field}
它无效,这是我得到的错误:
';' expected but '.' found.
我不确定为什么我收到此错误。
答案 0 :(得分:22)
对于可以跨越多行的更好的格式(如果需要):
@optionalObject match {
case Some(o) => {
@o.field
}
case None => {
No field text/html/whatever
}
}
或者,如果您未定义任何字段,则显示任何内容:
@for(o <- optionalObject) {
@o.field
}
答案 1 :(得分:6)
@optionalobject.map(o => o.field).getOrElse("default string if optionalobject is None")
答案 2 :(得分:0)
根据您的标签判断您使用的是Play 2.x版本,但是您正在引用Play 1.x模块中的文档。
假设您的类型匹配,我相信您正在寻找的是:
@optionalobject.getOrElse(field)
答案 3 :(得分:0)
另一种可能性是使用map,我喜欢与HTML混合的语法
@pagination.next.map { next =>
<a href="@Routes.paginated(next)">
@HtmlFormat.escape("Next >>>")
</a>
}
答案 4 :(得分:0)
有时候在处理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>