【发布时间】:2014-02-16 20:06:46
【问题描述】:
这是我第一次涉足客户端模板,我想确保我理解并正确使用它。阅读this LinkedIn engineering blog 后,我决定选择dust.js 而不是mustache 或handlebars。请注意,this stackoverflow post 回答了我的许多问题,但我仍有一些事情要澄清。
在我工作的环境中,我无法访问服务器端的任何内容,因此我创建的所有内容都必须能够完全在客户端的浏览器中运行。对于此示例,我将尝试从 LinkedIn Dust Tutorial 重新创建 this code sample。
我包含 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);
});
});
这似乎工作正常,您可以在 this jsfiddle 中看到。
几个问题:
为什么模板应该包含在脚本标签中?为什么不直接将其包含在 id="entry-template" 的 div 中,然后在dust.render() 期间替换其中的 html,就像在 this modified fiddle 中一样?
“dust.loadSource(compiled);”有什么作用?在the docs 中它说 “如果您将 'compiled' 字符串作为加载的 JS 脚本块的一部分包含在内,那么将定义并注册 'intro' 模板。如果您想立即执行此操作" 调用它,但我不明白这是什么意思。我注意到,如果我删除该行,那么它就不起作用,所以我想理解它。
在我对我的模板满意并最终确定后,我应该如何编译它,以便我导入更轻的 dust-core.js 而不是让浏览器编译它在每个页面加载?这样做有显着优势吗?还是应该让 dust-full.js 保持原样?
更一般地说,这看起来是一种合适/有用的方式来实现灰尘(或任何与此相关的模板框架)还是我只是在某个地方?
提前致谢。
【问题讨论】:
标签: linkedin dust.js client-side-templating