2013-08-27 38 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