如何手动使用预编译的handlebars.js模板?
比方说,我们有
source = "<p>Hello, my name is {{name}}</p>"
data = { name: "Joe" }
Run Code Online (Sandbox Code Playgroud)
目前,我有
template = Handlebars.compile(source)
render: -> template(data)
Run Code Online (Sandbox Code Playgroud)
源来自数据库,为了减少编译时间,我想使用一个编译步骤,先使用来对模板服务器端进行预编译Handlebars.precompile(source),然后再使用类似的方法:
template = precompiled_template
render: -> precompiled_template(data)
Run Code Online (Sandbox Code Playgroud)
precompiled_template是带有函数定义的字符串,因此不起作用。
另外,我还发现了Hanlebars.compile(source)() == Handlebars.precompile(source),但是在浏览了把手的源代码,即编译器和运行时之后,我仍然不确定如何实现这一点。
此速度测试http://jsperf.com/handlebars-compile-vs-precompile/3给出了答案。
显然,一种解决方案是eval()生成的字符串,它会起作用。
代码是
var data = { name: "Greg" };
var source = "<p>Howdy, {{ name }}</p>";
eval("var templateFunction = " + Handlebars.precompile(source));
var template = Handlebars.template(templateFunction);
template(data);
=> "<p>Howdy, Greg</p>"
Run Code Online (Sandbox Code Playgroud)
当然,我们需要谨慎对待 eval,并且可能存在更好的解决方案。