Play 2.0模板中的object.member模式匹配
根据Play 2.0文档,可以在模板中完成模式匹配,如下所示:
@connected match {
case models.Admin(name) => {
<span class="admin">Connected as admin (@name)</span>
}
case models.User(name) => {
<span>Connected as @name</span>
}
}
case表达式之后的括号之间的文本被视为输出(例如HTML),这非常方便。
但是,当试图使用不是简单变量的匹配表达式(如object.member)时,如下所示:
@album.year match {
case Some(y: Int) => { @y }
case None => { <b>nope</b> }
}
它会导致一个编译错误: "')' expected but 'case' found."
使用defining
将表达式绑定到一个简单的变量,如下所示:
@defining(album.year) { foo =>
@foo match {
case Some(y: Int) => { @y }
case None => { <b>nope</b> }
}
}
作品,但似乎有点麻烦。
在涉及对象和成员的表达式(例如album.year
)上使用此模式匹配功能是否有适当的方法?
你试过这个吗?
@album.year match {
case Some(y: Int) => {
@y
}
case None => {
<b>nope</b>
}
}
请参阅此处的示例:https://github.com/bjartek/computer-database-mongo/blob/matchtest/app/views/list.scala.html#L67
在模板中这样做时,看起来空白非常重要
目前不可能(2.0.1版本),因为它是一个确认的错误:
https://play.lighthouseapp.com/projects/82401/tickets/46-support-more-complex-match-statement
你是否尝试过这样做?
@album.year.getOrElse("<b>None</b>");
不知道它是否如此简单,但它应该工作。 请参阅https://github.com/playframework/Play20/blob/master/samples/scala/computer-database/app/views/list.scala.html#L64
链接地址: http://www.djcxy.com/p/10735.html上一篇: Pattern matching on object.member in Play 2.0 templates
下一篇: Service not being created (or connecting) after bindService()