# 局部

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>
Last Updated: 2023/9/14 11:12:03