# はじめに
# Handlebarsとは?
Handlebarsはシンプルなテンプレート言語です。
テンプレートと入力オブジェクトを使用して、HTMLまたはその他のテキスト形式を生成します。Handlebarsテンプレートは、Handlebars式が埋め込まれた通常のテキストのように見えます。
Handlebars式は、`{{`、コンテンツ、`}}`で構成されます。テンプレートが実行されると、これらの式は入力オブジェクトの値に置き換えられます。
# インストール
Handlebarsをテストする最も速い方法は、*CDN*からロードしてHTMLファイルに埋め込むことです。
<!-- Include Handlebars from a CDN -->
<script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>
<script>
// compile the template
var template = Handlebars.compile("Handlebars <b>{{doesWhat}}</b>");
// execute the compiled template and print the output to the console
console.log(template({ doesWhat: "rocks!" }));
</script>
# 言語機能
# 単純式
前述のように、次のテンプレートは2つのHandlebars式を定義しています
入力オブジェクトに適用される場合
式は対応するプロパティに置き換えられます。結果は次のとおりです
# ネストされた入力オブジェクト
入力オブジェクトに他のオブジェクトまたは配列が含まれている場合があります。例えば
このような場合、ドット表記を使用してネストされたプロパティにアクセスできます
いくつかの組み込みヘルパーを使用すると、現在のコンテキストをネストされたオブジェクトに変更できます。その後、このオブジェクトにルートオブジェクトであるかのようにアクセスできます
# 評価コンテキスト
組み込みのブロックヘルパー `each` と `with` を使用すると、現在の評価コンテキストを変更できます。
`with` ヘルパーはオブジェクトプロパティに飛び込み、そのプロパティにアクセスできるようにします
`each` ヘルパーは配列を反復処理し、単純なHandlebars式を介して各オブジェクトのプロパティにアクセスできるようにします。
# テンプレートコメント
コード内と同様に、Handlebarsコードでもコメントを使用できます。一般的にはある程度のロジックが含まれているため、これは良い習慣です。
コメントは結果の出力には含まれません。コメントを表示させたい場合は、HTMLコメントを使用してください。HTMLコメントは出力されます。
}}
やその他の Handlebars トークンを含む必要があるコメントは、{{!-- --}}
構文を使用する必要があります。
# カスタムヘルパー
Handlebarsヘルパーは、テンプレート内の任意のコンテキストからアクセスできます。 `Handlebars.registerHelper` メソッドを使用してヘルパーを登録できます。
ヘルパーは、関数の `this` コンテキストとして現在のコンテキストを受け取ります。
# ブロックヘルパー
ブロック式を使用すると、現在のコンテキストとは異なるコンテキストでテンプレートのセクションを呼び出すヘルパーを定義できます。これらのブロックヘルパーは、ヘルパー名の前に `#` を付けることで識別され、同じ名前の対応する閉じ括弧 `/` が必要です。HTMLリストを生成するヘルパーを考えてみましょう。
この例では、HTMLリストを生成する `list` というヘルパーを作成します。ヘルパーは、最初のパラメーターとして `people` を、2番目のパラメーターとして `options` ハッシュを受け取ります。 `options` ハッシュには `fn` という名前のプロパティが含まれており、通常の Handlebars テンプレートを呼び出すのと同じように、コンテキストを指定して呼び出すことができます。
実行すると、テンプレートは以下のようにレンダリングされます。
ブロックヘルパーは、else
セクション(例えば、組み込みの if
ヘルパーで使用される)を作成する機能など、より多くの機能を備えています。
ブロックヘルパーの内容は options.fn(context)
を呼び出すとエスケープされるため、Handlebars はブロックヘルパーの結果をエスケープしません。エスケープすると、内部コンテンツが二重にエスケープされます!
# HTML エスケープ
Handlebars は元々 HTML を生成するために設計されたため、{{expression}}
によって返される値をエスケープします。 Handlebars に値をエスケープさせたくない場合は、「トリプルスタッシュ」、{{{
を使用します。
2 行目の特殊文字はエスケープされます
Handlebars は Handlebars.SafeString
をエスケープしません。独自の HTML を生成するヘルパーを作成する場合は、通常、new Handlebars.SafeString(result)
を返します。このような状況では、パラメータを手動でエスケープする必要があります。
これは渡されたパラメータをエスケープしますが、レスポンスを安全としてマークするため、"トリプルスタッシュ" が使用されていない場合でも、Handlebars はそれをエスケープしようとしません。
警告
Handlebars は JavaScript 文字列をエスケープしません。インラインイベントハンドラなど、JavaScript を生成するために Handlebars を使用すると、クロスサイトスクリプティングの脆弱性につながる可能性があります。
# パーシャル
Handlebars パーシャルでは、共有テンプレートを作成することでコードを再利用できます。 registerPartial
メソッドを使用してパーシャルを登録できます
次のテンプレートと入力
は、次の結果を提供します
# 組み込みヘルパー
Handlebars は、if 条件や each イテレータなど、さまざまな組み込みヘルパーを提供しています。
# API リファレンス
Handlebars は、アプリケーションとヘルパーのために、さまざまな API とユーティリティメソッドを提供しています。
式 →