我想通過以下的Play documentation做一個自定義模板格式(播放2.5_ & _Scala 2.11.11),但我在這裏這樣就意味着它不是爲我工作。在播放創建自定義的模板格式2.5
我希望新的模板有「流」文件擴展名(如this video現在是幾歲),所以我創造了這個文件作爲文檔建議:
package ui
import akka.NotUsed
import akka.stream.scaladsl.{Source}
import play.twirl.api._
import scala.collection.immutable
case class HtmlStream(source: Source[Html, NotUsed]) extends Appendable[HtmlStream] {
def +=(other: HtmlStream): HtmlStream = andThen(other)
def andThen(other: HtmlStream): HtmlStream = HtmlStream(source.merge(other.source))
}
object HtmlStream {
def apply(text: String): HtmlStream = apply(Html(text))
def apply(html: Html): HtmlStream = HtmlStream(Source.single(html))
}
object HtmlStreamFormat extends Format[HtmlStream] {
def raw(text: String): HtmlStream = HtmlStream(text)
def escape(text: String): HtmlStream = raw(HtmlFormat.escape(text).body)
override def empty: HtmlStream = ???
override def fill(elements: immutable.Seq[HtmlStream]): HtmlStream = ???
}
而且已將此添加到build.sbt文件:
TwirlKeys.templateFormats += ("stream" -> "ui.HtmlStreamFormat.instance")
我看不出哪裏或如何包括以下隱(上預提到Play documentation - 底部);這可能是問題:
Play可以寫一個HTTP響應體用於哪 它存在的隱式play.api.http.Writeable [A]值A型的任何值。所以你需要的是爲你的模板結果類型定義一個這樣的值。對於 例如,下面是如何爲HTTP定義這樣的值:
implicit def writableHttp(implicit codec: Codec): Writeable[Http] =
Writeable[Http](result => codec.encode(result.body), Some(ContentTypes.HTTP))
當我嘗試創建一個新的文件view
,例如稱爲test.scala.stream
它不能識別它應該是什麼類型,所以它看起來有些絕對是錯誤的。幫助需要這個!