【发布时间】:2012-03-17 07:45:04
【问题描述】:
我在 scala 模板中的代码:
@session.get("user.id") match {
case Some(_) => "xx"
case _ => "yy"
}
<a href="">Logout</a>
但是case ...会直接显示到生成的html页面:
match { case Some(_) => "xx" case _ => "yy" } Logout
而在生成的.template.scala中是:
"""
<body>
"""),_display_(Seq(/*11.4*/session/*11.11*/.get("user.id"))),format.raw/*11.26*/(""" match """),format.raw("""{"""),format.raw/*11.34*/("""
case Some(_) => "xx"
case _ => "yy"
"""),format.raw("""}"""),format.raw/*14.4*/("""
<a href="">Logout</a>
"""
但我在文档中看到,它应该支持match case:https://github.com/playframework/Play20/wiki/ScalaTemplates
@connected match {
case models.Admin(name) => {
<span class="admin">Connected as admin (@name)</span>
}
case models.User(name) => {
<span>Connected as @name</span>
}
}
更新1
终于,我找到了工作的方法:
@defining(session.get("user.id")) { x =>
@x match {
case Some(_) => { "xx" }
case None => {"yy"}
}
}
但它看起来很复杂。
更新2
寻找另一个简单的解决方案:
@{session.get("user.id") match {
case Some(_) => "xx"
case _ => "yy"
}}
但在复杂情况下效果不佳:
@{session.get("user.id") match {
case Some(_) => {<a href="@routes.Users.logout">Logout</a>}
case _ => "yy"
}}
@routes.Users.logout 不会被转换。
UPDATE3
这是getOrElse 解决方案:
@session.get("user.id").map { _ =>
<a href="@routes.Users.logout">Logout</a>
}.getOrElse {
Not logged
}
它可以工作,但它不使用match case
【问题讨论】:
-
如果你把case的右边部分放在括号里怎么办?例如。
case Some(_) => { "xx" } -
谢谢,但这不起作用
标签: templates playframework-2.0