这已经有一个公认的答案,但这建议使用 jQuery 并编写代码来注入您的动态数据。我喜欢 jQuery,有时编写代码也不错,但这是一个关于模板使用的好问题。考虑到这一点,我将回答您的问题并使用 Transparency.js 和 Mustache.js 来展示您的选择。
在维护 DOM 中的元素和应用模板引擎时,您有两种选择。它们可以从那里开始(与您的 HTML 一起发送)并使用基于 DOM 的模板引擎,或者您可以将标记包含在标记中script
并使用基于字符串的模板引擎动态添加它们。
关于第一个选项,您仍然可以使用基于 DOM 的引擎(例如 Transparency 或 PURE)应用模板。Transparency 实际上期望您的 HTML 已经存在于 DOM 中,并将就地操作其内容。对于简单的模板,这很好用。是否可以向标记中的元素添加类、id 或其他标识属性取决于您,这是缺点。这是一个示例来演示:
HTML(用作模板并存在于 DOM 中):
<div class="my-block" id="myTemplate">
<h1 class="title"></h1>
<p class="description"></p>
</div>
JavaScript(期望包含 jQuery 或类似 jQuery 的库):
$(function() {
var data = {
title: 'Hello',
description: 'World'
};
$('#myTemplate').render(data);
});
这是一个 jsFiddle:Transparency.js 示例
我建议为你的 DOM 元素添加一个 id,这样你的 DOM 访问速度会更快一些。不过,这完全取决于您。
您还可以将 HTML 动态添加到 DOM。在这种情况下,您需要以其他方式包含模板。一种简单的方法是使用script
带有type="text/template"
. 浏览器不会将此文本放入 DOM,但可以使用 jQuery 之类的库来提取其内容以进行模板访问。这是一个使用 Mustache.js 演示该方法的示例。
HTML(包括script
标签内的模板):
<div class="my-block" id="myBlock"></div>
<script type="text/template" id="myTemplate">
<h1>{{ title }}</h1>
<p>{{ description }}</p>
</script>
JavaScript:
$(function() {
var data = {
title: 'Hello',
description: 'World'
};
var template = $('#myTemplate').html();
var html = Mustache.render(template, data);
$('#myBlock').html(html);
});
这是一个 jsFiddle:Mustache.js 示例
在第二个示例中,您需要 DOM 中的占位符 div 来输出模板化字符串,但您不需要包含h1
orp
元素,因为它们将被动态添加。
每种方法都有一些明显的优势。我个人喜欢 Transparency.js 及其兄弟,但它只适用于更简单的无逻辑模板。您还需要小心为元素添加属性。你可以在你的 CSS 中重复使用这些相同的属性,但是你开始将一些东西结合起来,这很危险。
Mustache.js 也是无逻辑的,但您不需要向生成的标记添加任何额外的属性,您只需要使用带有双花括号的 Mustache 语法。但是,您需要将模板包含在script
标签中,或者您也可以尝试使用 Hogan.js 之类的东西来预编译 Mustache。
我在最近发布的一个 Github Pages 站点中演示了一些其他示例以及 Jade。您可以直接在页面上查看模板,并查看源代码以了解它们在 JavaScript 中的呈现方式。
链接:模板沙箱
有关 Transparency.js 的更多信息:尝试透明度
..和 Mustache.js:Github 上的 Mustache.js