JavaScript支持哪些好的模板语言?

时间:2020-03-06 14:40:50  来源:igfitidea点击:

使用既定的编程语言,模板是一项非常健康的业务,但是有没有可以用JavaScript处理的好的模板呢?

"模板"是指接受数据对象作为输入,将数据插入某种序列化标记语言并输出标记的文档。著名的例子是JSP,原始的PHP,XSLT。

我所说的"好"是指HTML作者编写起来很容易声明,很健壮,并且其他语言也支持它。比我所知道的选项更好的东西。一些"不好"的例子:

字符串数学:

element.innerHTML = "<p>Name: " + data.name
    + "</p><p>Email: " + data.email + "</p>";

显然太笨拙,HTML结构不明显。

XSLT:

<p><xsl:text>Name: </xsl:text><xsl:value-of select="//data/name"></p>
<p><xsl:text>Email: </xsl:text><xsl:value-of select="//data/email"></p>

//从结构上讲,这很好,但是让我们面对现实吧,XSLT使HTML开发人员感到困惑。

修剪路径:

<p>Name: ${data.name}</p><p>Email: ${data.email}</p>

//这很好,但是JavaScript仅支持处理器,并且该语言有点原始(http://code.google.com/p/trimpath/wiki/JavaScriptTemplateSyntax)。

我很乐意看到将JSP或者ASP或者PHP的子集移植到浏览器中,但是我还没有发现。

这些天,人们在JavaScript中使用什么模板?

附录

几个月后,这里发布了许多可行的模板语言,但是其中大多数不能用于任何其他语言。这些模板中的大多数不能在JavaScript引擎之外使用。

微软的例外-我们可以在浏览器或者任何其他ASP引擎中处理相同的ASP。这有其自身的一系列可移植性问题,因为我们必须绑定到Microsoft系统。我已将其标记为答案,但仍对更便携式的解决方案感兴趣。

到目前为止,感谢所有投入!

解决方案

John Resig在http://ejohn.org/blog/javascript-micro-templating/上有一个微型javascript模板引擎。

天神http://www.kuwata-lab.com/tenjin/可能就是我们想要的东西。没用过,但是看起来不错。

我写了http://google-caja.googlecode.com/svn/changes/mikesamuel/string-interpolation-29-Jan-2008/trunk/src/js/com/google/caja/interp/index.html来描述模板系统,它通过根据前面的上下文选择正确的转义方案,以防止XSS攻击的方式将字符串插值连接到javascript。

即将推出的ASP.NET AJAX 4.0提供了客户端模板功能。

http://encosia.com/2008/07/23/sneak-peak-aspnet-ajax-4-client-side-templating/

另外,我们可以单独使用Microsoft AJAX库(这是ASP.NET AJAX的JavaScript部分),而无需使用ASP.NET。

http://www.asp.net/ajax/downloads/

ExtJS具有一个称为Ext.XTemplate的特殊模板类:http://extjs.com/deploy/dev/docs/?class=Ext.XTemplate

我很喜欢使用jTemplates:

http://jtemplates.tpython.com/

我今天遇到了这个,但是我还没有尝试过...

http://beebole.com/pure/

查询模板
演示:http://sandbox.meta20.net/querytemplates-js/demo.html

如果我们使用的是Script,则可能需要考虑SharpTemplate,这是一种强类型的超高效HTML模板引擎。

我们可能想看看Mustache,它是一种真正可移植且简单的模板语言,并带有其他语言的javascript支持。

闭包模板是Google提供的功能强大的模板系统,适用于Javascript和Java。我在使用它们方面有很好的经验。

这是一种在jQuery中实现的Smarty模板语言。 http://www.balupton.com/sandbox/jquery-smarty/demo/

一项令人印象深刻的功能是对动态更新的支持。因此,如果更新模板变量,它将在模板中使用该变量的任何位置进行更新。很漂亮

我们还可以使用onchange事件来挂接变量更改。因此,当说变量" page"改变时,这对于说出表演效果或者AJAX非常有用;-)