这是我第一次涉足客户端模板,我想确保我理解并正确使用它。在阅读了这个 LinkedIn 工程博客之后,我决定使用dust.js而不是mustache或handlebars。请注意,这篇 stackoverflow 帖子回答了我的许多问题,但我仍然有一些事情要澄清。
在我工作的环境中,我无法访问服务器端的任何内容,因此我创建的所有内容都必须能够完全在客户端的浏览器中运行。对于此示例,我将尝试从LinkedIn Dust 教程重新创建此代码示例。
我包含了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中看到的那样,这似乎工作正常。
几个问题:
为什么模板应该包含在脚本标签中?为什么不将其包含在 id="entry-template" 的 div 中,然后在dust.render() 期间替换其中的html,就像在这个修改过的小提琴中一样?
“ dust.loadSource(compiled); ”有什么作用?在文档中它说“如果您将 'compiled' 字符串作为加载的 JS 脚本块的一部分包含在内,则将定义并注册 'intro' 模板。如果您想立即执行此操作”,请调用它,但是我不明白那是什么意思。我注意到,如果我删除该行,那么它就不起作用,所以我想了解它。
在我对我的模板感到满意并完成它之后,我应该如何编译它以便我导入更轻的dust-core.js,而不是让浏览器在每次加载页面时对其进行编译?这样做是否有显着优势,或者我应该像这样使用dust-full.js吗?
更一般地说,这看起来像是实现灰尘(或任何模板框架)的合适/有用的方式,还是我只是在某个地方?
提前致谢。