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()