2013-08-27 44 views
4

我創建了一些可幫助我生成HTML的實用程序,並且在我的視圖中將它們引用爲@div("class" -> "well"){ Hello Well. }。到目前爲止,這些課程分類爲NodeSeq,因爲它們是aren't escaped。但我需要擺脫我的類層次結構頂部的NodeSeq,因爲Scala的xml有缺陷,使得我的代碼變得笨拙,因爲我可以切換到Traits。防止PlayFramework的模板引擎逃離我的字符串

因此,我試圖找出如何防止Play逃脫我的Tag-對象。但不幸的是,我發現唯一有效的解決方案是重寫模板編譯器,並讓用戶在他的Build.scala設置中指定我的編譯器。

但我希望忽略了一種更簡單的方法?

+0

我你是什麼意思,但我首先想到的(廣告代碼的助手會幫助示例代碼)有點不確定的是,你需要使用'@Html(」 不會逃脫的東西「)'?你能詳細說明嗎? – Mikesname

+0

我基本上是在Play引擎上構建一個自定義模板引擎。因此,用@ Html包裝我的電話不是一種選擇。 http://taig.github.io/Play-Tmpltr/ – Taig

回答

3

由於2.2.0-M1版本似乎有一種新的方法在解釋如何添加文檔自定義格式到模板引擎。這使我可以輕鬆集成我的實用程序。

自定義模板格式:JavaScala

3

如果你的html helpers返回'Html'而不是String,你不需要在視圖中使用@Html標籤來包裝它們。

import play.api.templates.Html 

def a(src: String, value: String) : Html = Html(s"<a href='$src'>$value</a>") 

將在視圖被稱爲以下,而無需在@Html包裹

@a("www.example.com", "Example") 
+0

這是一個很好的方法,但不幸的是我的助手'@ div'是一個正在通過'toString'方法渲染的類。 – Taig