局部
Handlebars 允许通过部分模板重用。 Partials 是普通的 Handlebars 模板,可以被其他模板直接调用。
基本局部
为了使用部分,必须通过 Handlebars.registerPartial
注册。
preparationScript Handlebars.registerPartial('myPartial', '{{prefix}}');
此调用将注册 myPartial
部分。 部分可以被预编译,并将预编译模板传递到第二个参数中。
调用部分是通过部分调用语法完成的:
template {{> myPartial }}
将渲染名为 myPartial
的部分。 当部分执行时,它将在当前执行上下文下运行。
动态局部
可以使用子表达式语法动态选择要执行的部分。
template {{> (whichPartial) }}
将评估 whichPartial
,然后渲染该函数返回名称的部分。
子表达式不解析变量,因此 whichPartial
必须是一个函数。 如果一个简单变量具有部分名称,则可以通过 lookup
辅助程序来解析它。
template {{> (lookup . 'myVariable') }}
局部上下文
通过将上下文传递给部分调用,可以在自定义上下文上执行部分。
template {{> myPartial myOtherContext }}
局部参数
自定义数据可以通过哈希参数传递给部分。
template {{> myPartial parameter=favoriteNumber }}
部分运行时将参数设置为 value
。
这对于将父上下文中的数据公开给部分上下文特别有用:
template {{#each people}}
{{> myPartial prefix=../prefix firstname=firstname lastname=lastname}}.
{{/each}}
局部块
尝试渲染未找到的部分时的正常行为是实现抛出错误。
如果需要故障转移,则可以使用块语法调用部分。
template {{#> myPartial }}
Failover content
{{/myPartial}}
如果 myPartial
部分未注册,则将渲染 Failover content
。
此块语法还可用于将模板传递给部分,该部分可以由专门命名的部分 @partial-block
执行。 一个模板
template {{#> layout }}
My Content
{{/layout}}
layout
部分包含
partial: layout Site Content {{> @partial-block }}
会渲染
output Site Content My Content
当以这种方式调用时,该块将在调用时的部分上下文中执行。 深度路径和块参数相对于部分块而不是部分模板进行操作。
template {{#each people as |person|}}
{{#> childEntry}}
{{person.firstname}}
{{/childEntry}}
{{/each}}
将从该模板渲染 person.firstname
,而不是部分渲染。
内嵌局部
模板可以通过 inline
装饰器定义块作用域的部分。
template {{#*inline "myPartial"}}
My Content
{{/inline}}
{{#each people}}
{{> myPartial}}
{{/each}}
这将为每个子级渲染 myPartial
部分。
每个内联部分可用于当前块和所有子块,包括其他部分的执行。 这允许布局模板和类似的功能:
template {{#> layout}}
{{#*inline "nav"}}
My Nav
{{/inline}}
{{#*inline "content"}}
My Content
{{/inline}}
{{/layout}}
其中 layout
部分可能是:
partial: layout <div class="nav">
{{> nav}}
</div>
<div class="content">
{{> content}}
</div>