处理Scala播放模板中的选项

时间:2013-12-12 20:32:26

标签: scala playframework playframework-2.0 playframework-2.1

我正在尝试在Scala Play模板中引用类型选项。我一直在尝试使用此资源:http://www.playframework.com/modules/scala-0.9/templates

这就是我尝试引用案例类中的字段的方法:

@{optionalobject ?. field}

它无效,这是我得到的错误:

';' expected but '.' found.

我不确定为什么我收到此错误。

5 个答案:

答案 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>