这是我第一次尝试客户端模板,我希望确保我理解并正确使用它。在阅读了LinkedIn工程博客之后,我决定选择dust.js而不是mustache或handlebars。请注意这篇stackoverflow文章回答了我的许多问题,但我仍然有一些需要澄清的事情。
在我工作的环境中,我无法访问服务器端的任何内容,因此我创建的所有内容都必须能够完全在客户端浏览器中运行。在这个例子中,我将尝试重新创建this code sample,它来自于LinkedIn Dust Tutorial。我包含了dust-full.js而不是dust-core.js,因为我要动态编译模板:
<script src="js/dust-full.js"></script>
这是HTML代码:
<script id="entry-template">
{title}
<ul>
{#names}
<li>{name}</li>{~n}
{/names}
</ul>
</script>
<div id="output"></div>
而 JavaScript(使用 jQuery):
$(document).ready(function () {
var data = {
"title": "Famous People",
"names" : [{ "name": "Larry" },{ "name": "Curly" },{ "name": "Moe" }]
}
var source = $("#entry-template").html();
var compiled = dust.compile(source, "intro");
dust.loadSource(compiled);
dust.render("intro", data, function(err, out) {
$("#output").html(out);
});
});
这似乎可以正常工作,你可以在这个jsfiddle中看到。
有几个问题:
为什么模板应该被包含在script标记中? 为什么不只是将其包含在id =“entry-template”的div中,然后在dust.render()期间替换其中的html,例如this modified fiddle中所示?
"dust.loadSource(compiled);"是什么意思? 在the docs中说:“如果您将'compiled'字符串作为要加载的JS脚本块的一部分包含在其中,那么'intro'模板将被定义并注册。 如果你想立即做到这一点,就调用它”,但我不明白这是什么意思。 我已经注意到,如果我删除该行,则不起作用,因此我想了解它。
当我满意我的模板并完成它后,应该如何编译它,以便导入较轻的dust-core.js,而不是让浏览器在每个页面加载时进行编译? 这样做有显着优势吗,还是应该像使用dust-full.js那样保持不变?
更普遍地说,这看起来像实现dust(或任何模板框架)的适当/有用的方式吗,还是我完全走错了?
提前感谢。