我发现handlebar.runtime.js
没有compile
办法。所以我下载了不正确的版本来使用模板引擎。
但它handlebar.runtime.js
是干什么用的?
Download: runtime-1.0.0
在下载页面上更不引人注意会更好吗?
我发现handlebar.runtime.js
没有compile
办法。所以我下载了不正确的版本来使用模板引擎。
但它handlebar.runtime.js
是干什么用的?
Download: runtime-1.0.0
在下载页面上更不引人注意会更好吗?
Handlebars 使用看起来像 {{this}} 的标签,浏览器本身无法理解这些标签。为了让浏览器呈现这些标签,它们必须被编译。编译可以在加载页面之前或之后进行。
为了加快速度,您可以预编译您的模板。车把网站上的更多信息。如果您这样做,您只需在页面中包含车把运行时脚本。它比完整的车把脚本小,因为它不需要担心编译模板。它假定您已经预编译了它们。
当一个模板被编译时,它被转换成一个函数,当被调用时,它会返回真正的 HTML,其中花括号标签已经被转换成浏览器可以理解的值。
例如,这...
<div class="entry">
<h1>{{title}}</h1>
<div class="body">
{{body}}
</div>
</div>
...在预编译后将转换为以下(截至 2014 年 6 月):
(function() {
var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};
templates['test.hbs'] = template({"compiler":[5,">= 2.0.0"],"main":function(depth0,helpers,partials,data) {
var helper, functionType="function", escapeExpression=this.escapeExpression;
return "<div class=\"entry\">\n <h1>"
+ escapeExpression(((helper = helpers.title || (depth0 && depth0.title)),(typeof helper === functionType ? helper.call(depth0, {"name":"title","hash":{},"data":data}) : helper)))
+ "</h1>\n <div class=\"body\">\n "
+ escapeExpression(((helper = helpers.body || (depth0 && depth0.body)),(typeof helper === functionType ? helper.call(depth0, {"name":"body","hash":{},"data":data}) : helper)))
+ "\n </div>\n</div>\n";
},"useData":true});
})();
这里重要的一点是,在某些时候,handlebars 模板必须转换成这个函数,这样才能生成真正的 HTML。车把运行时脚本不包含编译器,因此使其更小。通过预编译您的模板,JavaScript 在呈现页面之前必须执行的步骤将减少一个繁重的步骤。