不能用play 2.3连接play.twirl.api.Html对象

时间:2015-04-08 21:19:11

标签: scala playframework playframework-2.3 twirl

我正在尝试将一个相当大的项目从play framework 2.2迁移到2.3。在项目中,我们有一些帮助者做这样的事情:

import play.api.templates.Html;
...
private object HtmlHelper {
  ...
  // Given a sequence of Htmls, return a single Html containing them
  def html(htmls: Seq[Html]): Html = htmls.foldLeft(Html(""))(_+=_)
}

我已将其转换为:

import play.twirl.api.Html;
...
private object HtmlHelper {
  ...
  // Given a sequence of Htmls, return a single Html containing them
  def html(htmls: Seq[Html]): Html = htmls.foldLeft(Html(""))((r,c) => r + c)
}

无法使用以下错误进行编译:

Read from stdout: <PATH> type mismatch;
Read from stdout: found   : play.twirl.api.Html
Read from stdout: required: String

我一直试图在2.3中找到关于这个Html对象的文档,但没有找到任何运气。据我所知,Html对象实现了Appendable,这意味着+运算符应该工作......我没有时间学习所有Scala和这个假设的&#34;表达&#34;语法让我很紧张。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

+=上不再定义Html方法,因此编译器会尝试将其作为String工作,这也不起作用。请参阅updated scaladocHtml是一种Appendable)。

  

这用于支持+ =,但不再需要。

     

@todo更改名称以反映不可附加的

我猜您可以合并String个值,然后转换回Html

def html(htmls: Seq[Html]): Html =
    Html(htmls.foldLeft("")((r, c) => r + c.toString))

scala> val list = List(Html("<p>1</p>"), Html("<p>2</p>"), Html("<p>3</p>"))
list: List[play.twirl.api.Html] = List(<p>1</p>, <p>2</p>, <p>3</p>)

scala> html(list)
res5: play.twirl.api.Html = <p>1</p><p>2</p><p>3</p>

实际上有一个名为fill的方法已经在HtmlFormat中执行了此操作:

def html(htmls: Seq[Html]): Html = HtmlFormat.fill(htmls)

Seq可能有点挑剔。