【问题标题】:Dealing with Options in Scala Play Template处理 Scala Play 模板中的选项
【发布时间】:2013-12-31 11:06:42
【问题描述】:

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

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

@{optionalobject ?. field}

它不工作,这是我得到的错误:

';' expected but '.' found.

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

【问题讨论】:

    标签: scala playframework playframework-2.0 playframework-2.1


    【解决方案1】:

    对于可以跨越多行的稍微更好的格式(如果需要):

    @optionalObject match {
      case Some(o) => {
        @o.field
      }
      case None => {
        No field text/html/whatever
      }
    }
    

    或者如果您不想在未定义字段的情况下显示任何内容:

    @for(o <- optionalObject) {
      @o.field
    }
    

    【讨论】:

    • 第二个代码 sn-p 用于 如果字段未定义则不显示任何内容 用例很可爱。我一直在掩饰Option 是一个集合类型,允许你做这样的事情。
    【解决方案2】:
    @optionalobject.map(o => o.field).getOrElse("default string if optionalobject is None")
    

    【讨论】:

      【解决方案3】:

      根据您的标签判断,您使用的是 Play 2.x 变体,但您引用的文档来自适用于 Play 1.x 的模块。

      假设您的类型匹配,我相信您正在寻找的是:

      @optionalobject.getOrElse(field)
      

      【讨论】:

      • 这不起作用。据说该领域不存在。但是,它必须存在。当只输出案例类时,它会显示案例类的所有字段。
      • @Lilluda5 编辑您的问题并显示更多代码。你如何声明optionalobjectfield
      【解决方案4】:

      另一种可能性是使用地图,我更喜欢与 HTML 混合使用的语法

      @pagination.next.map { next =>
        <a href="@Routes.paginated(next)">
          @HtmlFormat.escape("Next >>>")
        </a>
      }
      

      【讨论】:

        【解决方案5】:

        有时在处理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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-21
          相关资源
          最近更新 更多