簡體   English   中英

無法使用播放2.3連接play.twirl.api.Html對象

[英]Can't concatenate play.twirl.api.Html objects with play 2.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,這種所謂的“表達”語法讓我很緊張。

任何幫助,將不勝感激。

Html上沒有更多的+=方法,因此編譯器會嘗試使其作為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>

實際上,在HtmlFormat有一個名為fill的方法已經這樣做了:

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

Seq可能有點挑剔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM