Javascript模板库,用于推断使用过的变量和依赖项

时间:2011-10-29 15:59:16

标签: javascript templates dependency-management templating templating-engine

是否有一个Javascript模板库可以自动推断模板中使用的变量以及它们之间可能存在的依赖关系?例如,如果我有一个看起来像这样的模板(Handlebars语法):

<script id="entry-template" type="text/x-handlebars-template">
<div class="entry">
  <h1>{{title}}</h1>
  <div class="body">
    {{body}}
  </div>
</div>
</script>

我希望能够做到这样的事情:

var source   = $("#entry-template").html();
var template = Handlebars.compile(source);
template.vars() => {title: "", body: ""}

我希望这个功能的原因是我希望能够生成一个包含反映完成模板所需变量的字段的表单。

1 个答案:

答案 0 :(得分:2)

此代码段(在http://jsfiddle.net/CfaAW/2/处编辑)使用正则表达式查找简单的{{var}}语法,并且还会查找.来处理句柄路径。

function extractObjectFromTemplate(source) {
    var handlebarsRegex = /\{\{([\s\S]+?)\}\}/g;
    var varObject = {};
    var varArray, ns, o, i, len;
    while ((varArray = handlebarsRegex.exec(source)) !== null) {
        ns = varArray[1].split('.');
        o = varObject;
        for (i = 0, len = ns.length; i < len; i++) {
            o = o[ns[i]] = o[ns[i]] || (i == len - 1 ? "" : {});
        }
    }

    return varObject;
}

在您的模板上,JSON.stringify(extractObjectFromTemplate(source))为您提供:

{"title":"","body":""}

并在模板中使用Handlebars路径

<h1>{{title.h1}}</h1>
<h2>{{title.h2}}</h2>
<div class="body">
  {{body}}
</div>

您将获得嵌套属性

{"title":{"h1":"","h2":""},"body":""}