在成熟的编程语言中,模板是一个相当健康的业务,但是否有任何好的模板可以在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 开发者感到困惑。
Trimpath:
<p>Name: ${data.name}</p><p>Email: ${data.email}</p>
// 这真的很好,但是处理器仅支持JavaScript,并且语言有点原始 (http://code.google.com/p/trimpath/wiki/JavaScriptTemplateSyntax)。
我想看到 JSP、ASP 或 PHP 的子集移植到浏览器中,但我还没有找到。
现在人们在 JavaScript 中使用什么模板引擎?
补充1(2008)
几个月后,这里已经发布了许多可用的模板语言,但其中大多数在其他语言中无法使用。这些模板中的大多数都不能在 JavaScript 引擎之外使用。
例外是微软公司的 -- 您可以在浏览器或任何其他 ASP 引擎中处理相同的 ASP。这具有自己的可移植性问题,因为您必须绑定到 Microsoft 系统。我标记它为答案,但仍然对更具可移植性的解决方案感兴趣。
补充2(2020)
翻出这个旧问题,十年过去了,Mustache 已经被广泛支持,有数十种不同语言的版本。如果还有人在阅读这篇文章,那么 Mustache 就是当前的答案。