3

我正在尝试将一个相当大的项目从 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 并且这种所谓的“富有表现力”的语法让我感到不安。

任何帮助,将不胜感激。

4

1 回答 1

1

上没有+=定义更多方法Html,因此编译器试图使其作为 a 工作String,这也不起作用。请参阅更新的 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

于 2015-04-08T21:25:56.180 回答