# 编译和预编译
# Handlebars.compile(template, options)
编译一个模版以立即运行。
const template = Handlebars.compile("{{foo}}");
template({});
支持多种选项以更改模版的执行方式。
data
: 设置为 false 以终止@data
跟踪。compat
: 设置为 true 以允许递归领域查找。knownHelpers
: 将已知在模版运行时会真实存在的助手代码列表 Hash 化。输入本参数会使编译器在一些情况下优化。内置助手代码 已经在本列表里包含,但若设置本项为false
,内置的助手代码可能会被忽视。knownHelpersOnly
: 设置为 true 以允许基于已知助手代码列表的进一步优化。noEscape
: 设置为 true 以避免 HTML 的内容转义。strict
: 在严格模式下运行。在这个模式下,模版将会对缺失参数抛出异常,而非静默忽略。同时,这种模式将会禁止逆操作,比如{{^foo}}{{/foo}}
,除非领域被特意包含在源对象中。assumeObjects
: 在遍历路径时,不再检查对象是否存在。这是严格模式的子集,本子集在已知输入安全的情况下会生成最优模版。preventIndent
: 默认情况下,缩进的代码片段调用将会导致代码片段整体全部被缩进。在代码片段写入pre
标签时,这会造成未 预料到的结果。将本项设置成true
可以避免这种自动缩进的功能。ignoreStandalone
: 当设置为true
时,将不会去除单独的标签。在这种情况下,不在同一行的代码块和代码片段将不会去除本行 里的空格。explicitPartialContext
: 对代码片段的上下文进行精确设置。当开启时,没有设置上下文的代码片段将会依托空对象执行。
# Handlebars.precompile(template, options)
对一个模版进行预编译,这样可以直接将模版送到客户端并执行而不需要再编译。
var templateSpec = Handlebars.precompile("{{foo}}");
与 Handlebars.compile
方法的参数相同,并且额外的参数有:
srcName
: 生成输入文件的源键值表。当运行时,返回的结构为{code, map}
。code
包含模版的定义,map
包含源键值表。destName
: 可选,本参数可以与srcName
一起使用以在生成源键值表的时候同时提供目标文件的名称。
# Handlebars.template(templateSpec)
设置一个已经被 Handlebars.precompile
预编译的模版。
var template = Handlebars.template(templateSpec);
template({});