(预)编译
Handlebars.compile(template,options)
编译一个模板以便它立即执行。
const template = Handlebars.compile("{{foo}}");
template({});
支持一系列选项来改变执行模板的方式。
-
data
: 设置为false
来禁用对@data
的追踪。 -
compat
:设置为true
来启用递归字段查询。 -
knownHelpers
: 包含已知将在模板运行时起作用的辅助程序的散列值列表。传递这个参数允许编译器优化许多情况。Builtin
辅助程序自动包含在此列表中,可以通过将该值设置为false
来省略它 -
knownHlpersOnly
: 设置为true
允许编译器根据已知的辅助程序列表进行进一步的优化。 -
noEscape
: 设置为true
来避免HTML转义任何内容。 -
strict
: 在严格模式下运行。 在这种模式下,模板将抛出而不是默默地忽略丢失的字段。 这具有禁用诸如{{^ foo}} {{/ foo}}
之类的逆运算的副作用,除非在源对象中明确包含字段. -
preventIndent
: 默认情况下,缩进部分调用会导致整个部分的输出缩进相同的数量。这可能导致在部分编写预标签时出现意外的行为。将此选项设置为true
将禁用自动缩进特性。 -
ignoreStandalone
: 设置为true
移除独立标签。当设置了该选项,区块和片段在它们自己的行上不会删除该行上的空白。 -
explicitPartialContext
:禁用局部变量的隐式上下文。启用时,未传递上下文值的分区将对空对象执行。
生成的模板函数可以称为template(context,options)
,其中context
是输入对象。 options
是可以具有以下任何属性的对象.
-
data
:传入一个对象来定义自定义@variable
私有变量. -
helpers
:除了全局定义的辅助程序外,还要传递提供自定义的辅助程序。在模板执行期间,此对象中定义的值将替换全局对象中定义的任何值.
-
partials
: 传入以提供除全局定义的片段之外的自定义片段。在模板执行期间,此对象中定义的值将替换全局对象中定义的任何值
-
allowCallsToHelperMissing
: 如果设置为true
,将允许像{{helperMissing}}
和{{blockHelperMissing}}
这样的调用。请不要认为这允许模板作者为在运行handlebars
的环境中远程执行代码而创建模板。
Handlebars.precompile(template, options)
预编译给定的模板,以便可以将其发送到客户端并在不编译的情况下执行。
var templateSpec = Handlebars.precompile("{{foo}}");
支持与handlebar .compile
方法相同的所有选项参数。另外可以传递:
srcName
:传递以生成输入文件的源映射。以这种方式运行时,返回结构是{code, map}
,其中代码包含模板定义,map
包含源映射.destName
: 可选参数,与srcName一起使用,在生成源映射时提供目标文件名。
Handlebars.template(templateSpec)
设置用`handlebar .precompile`预编译的模板
var template = Handlebars.template(templateSpec);
template({});
运行时
Handlebars.registerPartial(name, partial)
注册环境中任何模板都可以访问的模板片段。
Handlebars.registerPartial('foo',partial)
支持注册多个模板片段
Handlebars.registerPartial({ foo: partial, bar: partial });
如果加载整个库,这些片段可能是将被按需编译的字符串。如果仅加载运行时,这些片段则必须是已经被Handlebars.template
方法设置过的预编译模板。
Handlebars.unregisterPartial(name)
注销已经注册过的模板片段
Handlebars.unregisterPartial("foo");
Handlebars.registerHelper(name,helper)
注册一个可以被环境内任何模板访问的辅助程序。
Handlebars.registerHelper("foo", function() {});
也可以一次性注册多个辅助程序:
Handlebars.registerHelper({ foo: function() {}, bar: function() {} });
Handlebars.unregisterHelper(name)
注销之前注册过的辅助程序
Handlebars.unregisterHelper("foo");
Handlebars.create()
创建一个独立的`Handlebars` 环境。
var OtherHandlebars = Handlebars.create();
每个环境都有自己的辅助程序和模板片段。这仅在那些只需要一部分模板片段和辅助程序的情况下才是必要的。大多数情况下只需要直接使用根作用域的Handlebars
。
为给定的环境创建的模板会被绑定到该环境。这意味着那些需要在多个环境使用的模板将需要被重新编译或者通过Handlebars.template
重构每个环境。 这也适用于模板片段。
Hanlebars.noConflict()
从全局名称空间中删除此Handlebars
实例,将全局Handlebars
变量恢复为其先前的值.
var myHandlebars = Handlebars.noConflict();
这允许同时使用库的不同版本,而不必担心版本冲突。
工具函数
辅助工具
在实现自定义帮助程序时,这些方法非常方便。
Handlebars.SafeString(string)
在模板呈现时防止字符串转义
new Handlebars.SafeString("<div>HTML Content!</div>");
在构造将被标记为安全的字符串时,应该使用handlebars. escapeexpression
方法正确地转义任何外部内容,以避免潜在的安全问题。
Handlebars.escapeExpression(string)
HTML转义传递的字符串,使其作为HTML内容中的文本呈现是安全的。
Handlebars.Utils.escapeExpression(string);
将&,<,>,",',',=
替换为字符串值的HTML
实体等效值。SafeString
值保持不变.
除三括号表达式外的所有表达式的输出都通过此方法传递。helper
类在通过SafeString
实例返回HTML
内容时也应该使用此方法,以防止可能的代码注入。
这个方法是Handlebars.Utils.escapeExpression
的别名。
Handlebars.createFrame(data)
块辅助程序用于创建子数据对象。
if (options.data) {var data = Handlebars.createFrame(options.data);data.foo = "bar";options.data = data;
}
修改数据状态的助手应该在这样做时创建一个新框架,以隔离它们自己并避免破坏任何父状态。通常,每个辅助程序执行只需要创建一个框架。例如,每个迭代器创建一个单独的框架,该框架被所有子执行重用。
一般工具
Handlebars
提供了一系列工具方法,这些方法通过Handlebars.Utils
对象暴露出来。
Handlebars.Utils.isEmpty(value)
确定给定值是否为空
内置的if
和with
辅助程序使用它来控制它们的执行流。Handlebars
定义的“空”是:
- 长度为0的数组
- 除0以外的假值。
这是为了配合 插值行为
Hanlebars.Utils.extend(obj,value)
简单的实用程序方法来扩大obj与所有键的定义上的值
比如,Hanlebars.Utils.extend(foo,{bar:true})
上面的表达式将会将会为foo
对象设置一个名为bar
的键,并将值设置为`true
Handlebars.Utils.toString(obj)
一般的toString
方法。
Handlebars.Utils.isArray(obj)
判断一个对象是否是数组
Handlebars.Utils.isFunction(obj)
判断一个对象是否是函数。
Handlebars.log(level,message)
使用log
辅助程序打印日志
如果需要,可以被重写
@data
变量
以下@data
变量由Handlebars
及其内置辅助程序实现。
@root
执行模板的初始上下文.
{{#each array}} {{@root.foo}} {{/each}}
除非显式修改,否则此值在页面呈现的所有部分中都是一致的,这意味着可以在深度参数无法引用父模板的片段中使用该值。
@first
在迭代的第一步中,each
辅助程序将其设置为true
{{#each array}} {{#if @first}} First! {{/if}} {{/each}}
@index
当前迭代步骤的从零开始的索引。由each
辅助程序设置。
{{#each array}} {{@index}} {{/each}}
@key
当前迭代步骤的键名。在遍历对象时由each
辅助程序设置。
{{#each array}} {{@key}} {{/each}}
@last
在迭代的最后一步中,each
辅助程序将其设置为true
{{#each array}} {{#if @last}} Last :( {{/if}} {{/each}}
@level
指定的日志级别
template({}, { data: { level: Handlebars.logger.WARN } });