handlebar.js和handlebar.runtime.js有什么区别?
我发现handlebar.runtime.js
没有compile
方法。 所以我没有下载正确的版本来使用模板引擎。
但是, handlebar.runtime.js
是什么?
Download: runtime-1.0.0
在下载页面上会更不明显
把手使用看起来像{{this}}的标签,浏览器本身无法理解。 为了使浏览器呈现这些标签,必须对其进行编译。 编译可以在加载页面之前或之后进行。
为了加快速度,你可以预编译你的模板。 更多信息在车把网站 。 如果你这样做,你只需要在你的页面上包含句柄运行时脚本。 它比完整的handlebars脚本小,因为它不需要担心编译模板。 它假定你已经预编译了它们。
当一个模板被编译时,它被转换成一个函数,当被调用时,它将返回真正的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}); })();
这里重要的是,在某些时候,把手模板必须被转换成这个function,以便能够生成真正的HTML。 handlebars运行时脚本不包含编译器,从而使其更小。 通过预编译模板,在呈现页面之前JavaScript将经历一个较less的步骤。