# パーシャル

Handlebarsは、パーシャルによるテンプレートの再利用を可能にします。パーシャルは、他のテンプレートから直接呼び出すことができる通常のHandlebarsテンプレートです。

# 基本的なパーシャル

パーシャルを使用するには、`Handlebars.registerPartial` を介して登録する必要があります。

準備スクリプト
Handlebars.registerPartial('myPartial', '{{prefix}}');

この呼び出しは、 `myPartial` パーシャルを登録します。パーシャルは事前にコンパイルすることができ、コンパイルされたテンプレートは2番目のパラメータに渡されます。

パーシャルの呼び出しは、パーシャル呼び出し構文を介して行われます。

テンプレート ...(SVG icon omitted) ...
{{> myPartial }}

`myPartial` という名前のパーシャルをレンダリングします。パーシャルが実行されると、現在の 実行コンテキスト で実行されます。

# 動的パーシャル

部分式構文を使用して、実行するパーシャルを動的に選択できます。

テンプレート ...(SVG icon omitted) ...
{{> (whichPartial) }}

`whichPartial` を評価し、この式によって返された名前のパーシャルをレンダリングします。

部分式は変数を解決しないため、`whichPartial` は関数でなければなりません。単純な変数にパーシャル名が含まれている場合は、`lookup` ヘルパーを使用して解決できます。

テンプレート ...(SVG icon omitted) ...
{{> (lookup . 'myVariable') }}

# パーシャルコンテキスト

パーシャル呼び出しにコンテキストを渡すことで、カスタムコンテキストでパーシャルを実行できます。

テンプレート ...(SVG icon omitted) ...
{{> myPartial myOtherContext }}

# パーシャルパラメータ

カスタムデータは、ハッシュパラメータを介してパーシャルに渡すことができます。

テンプレート ...(SVG icon omitted) ...
{{> myPartial parameter=favoriteNumber }}

パーシャルの実行時に、パラメータを `value` に設定します。

これは、親コンテキストからパーシャルにデータを公開する場合に特に役立ちます。

テンプレート
{{#each people}}
  {{> myPartial prefix=../prefix firstname=firstname lastname=lastname}}.
{{/each}}

# 部分ブロック

見つからないパーシャルをレンダリングしようとすると、通常は実装がエラーをスローします。代わりにフェイルオーバーが必要な場合は、ブロック構文を使用してパーシャルを呼び出すことができます。

テンプレート (プレイグラウンドで表示のSVGアイコン)
{{#> myPartial }}
  Failover content
{{/myPartial}}

これは、`myPartial` パーシャルが登録されていない場合に `Failover content` をレンダリングします。

このブロック構文は、テンプレートをパーシャルに渡すためにも使用できます。テンプレートは、`@partial-block` という特別な名前のパーシャルによって実行されます。例えば、以下のテンプレートがあるとします。

テンプレート (プレイグラウンドで表示のSVGアイコン)
{{#> layout }}
My Content
{{/layout}}

そして、`layout` パーシャルに以下の内容が含まれているとします。

パーシャル: layout (プレイグラウンドで表示のSVGアイコン)
Site Content {{> @partial-block }}

これは以下のようにレンダリングされます。

この方法で呼び出されると、ブロックは呼び出し時のパーシャルのコンテキストで実行されます。深度パスとブロックパラメータは、パーシャルテンプレートではなく、パーシャルブロックに対して相対的に動作します。

テンプレート (プレイグラウンドで表示のSVGアイコン)
{{#each people as |person|}}
  {{#> childEntry}}
    {{person.firstname}}
  {{/childEntry}}
{{/each}}

これは、パーシャルではなく、このテンプレートから `person.firstname` をレンダリングします。

# インラインパーシャル

テンプレートは、`inline` デコレータを使用してブロックスコープのパーシャルを定義できます。

テンプレート (プレイグラウンドで表示のSVGアイコン)
{{#*inline "myPartial"}}
  My Content
{{/inline}}
{{#each people}}
  {{> myPartial}}
{{/each}}

これは、それぞれの子に対して `myPartial` パーシャルをレンダリングします。

各インラインパーシャルは、現在のブロックとすべての子で使用でき、他のパーシャルの実行も含まれます。これにより、レイアウトテンプレートや同様の機能が可能になります。

テンプレート
{{#> layout}}
  {{#*inline "nav"}}
    My Nav
  {{/inline}}
  {{#*inline "content"}}
    My Content
  {{/inline}}
{{/layout}}

layout パーシャルが配置される場所

パーシャル: layout (上記と同じSVG)
<div class="nav">
  {{> nav}}
</div>
<div class="content">
  {{> content}}
</div>
最終更新日: 2021年10月19日 午後7時04分13秒