18

模板在已建立的编程语言中是一项相当健康的业务,但是有没有可以用 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 中使用什么作为模板?

附录 1 (2008)

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

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

附录 2 (2020)

抛开这个老问题,十年过去了,Mustache 得到了数十种语言的广泛支持。现在是当前答案,以防有人仍在阅读此内容。

4

16 回答 16

13

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

于 2008-09-24T18:38:38.523 回答
10

您可能想查看Mustache - 它是真正可移植且简单的模板语言,在其他语言中支持 javascript。

于 2010-04-21T23:56:00.890 回答
6

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

http://beebole.com/pure/

于 2008-10-21T02:27:38.773 回答
5

闭包模板是来自 Google 的一个相当强大的模板系统,它们适用于 Javascript 和 Java。我有很好的使用它们的经验。

于 2010-07-03T05:43:17.813 回答
2

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

于 2008-09-25T20:45:47.353 回答
2

我使用Google Closure模板。http://code.google.com/closure/templates/docs/helloworld_js.html

简单的模板,双向支持,自动转义,针对速度进行了优化。此外,模板解析作为构建步骤发生,因此不会减慢客户端的速度。另一个好处是您可以使用 Java 中的相同模板,以防您需要在服务器上为禁用 JavaScript 的用户生成 HTML。

于 2011-01-26T05:21:22.793 回答
1

天神 http://www.kuwata-lab.com/tenjin/可能就是您要找的。没用过,不过看着不错。

于 2008-09-24T18:39:15.980 回答
1

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

于 2008-09-24T18:49:50.337 回答
1

即将到来的 ASP.NET AJAX 4.0 中包含客户端模板功能。

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

此外,您可以单独使用 Microsoft AJAX 库(它是 ASP.NET AJAX 的 JavaScript 部分),而无需使用 ASP.NET。

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

于 2008-09-25T02:47:30.063 回答
1

我很喜欢使用 jTemplates

http://jtemplates.tpython.com/

于 2008-10-03T15:31:41.660 回答
1

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

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

您还可以使用 onchange 事件挂钩变量更改。因此,当说变量“页面”发生变化时,这对于说执行效果或 AJAX 很有用;-)

于 2010-07-06T10:21:28.960 回答
0

QueryTemplates 演示:http ://sandbox.meta20.net/querytemplates-js/demo.html

于 2009-02-28T20:39:18.590 回答
0

如果您使用的是Script#,您可能需要考虑SharpTemplate,这是一个强类型、超高效的 HTML 模板引擎。

于 2010-01-17T01:50:50.213 回答
0

如果您使用Rhino(JavaScript 的 Java 实现),您也可以在服务器上运行您选择的 JavaScript 模板语言。

您还确定服务器和浏览器模板结果是相同的。(如果模板以 2 种语言实现,则实现之间可能存在一些细微差别。)

...但是现在 5 年后(即 2016 年),使用 Java 8,您将使用 Nashorn,而不是 Rhino。这是 Nashorn 的介绍,如果您向下滚动一点,您会发现 Nashorn + Mustahce 模板语言的示例: http ://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515 .html

(我个人通过 Nashorn 使用 React.js 服务器端(但 React 不是模板语言)。)

于 2011-08-24T06:50:41.197 回答
0

远端模板http://code.google.com/p/distal 有点像您的 XSLT 演示,但更简单:

<p>Name: <span data-qtext="data.name"></span></p>
<p>Email: <span data-qtext="data.email"></span></p>
于 2012-07-20T04:42:17.413 回答
0

一个可能有趣的选择是https://github.com/rexxars/react-markdown,这是一种在基于 React 的 Web UI 中包含 markdown 的相当有趣的方式。我已经对其进行了测试,效果相当不错,尽管文档让我了解到 HTML 渲染在 3.x 分支中遇到了一些问题。尽管如此,对于某些用途来说,这似乎是一个可行的选择。

于 2017-11-27T06:23:51.647 回答