Handlebars.js v2.0.0における出力の変化

Handlebars.jsのv2.0.0が9月に出ていたようだ。今更気付いたので更新してみたら、出力が少し変わっていた。改行や空白の扱いがMustacheのspec通りになったということらしい。パーシャルで親テンプレートのインデントが継承されたり、改行が二重にならなくなったりと、おおよそ直感的な出力に変わったと言えそう。

例えば、以下のようなパーシャルを呼ぶテンプレートがあるとする。

<header>
  {{> navigation}}
</header>

navigationパーシャルは以下のようなもので、インデントなし・最後に改行ありという普通に書いたものとする。

<ul>
  <li><a href="/">Home</a></li>
  <li><a href="/features">Features</a></li>
  <li><a href="/pricing">Pricing</a></li>
  <li><a href="/support">Support</a></li>
</ul>

旧バージョンでは以下のように出力されていた。インデントが無視され、最後の改行が重なる。

<header>
  <ul>
  <li><a href="/">Home</a></li>
  <li><a href="/features">Features</a></li>
  <li><a href="/pricing">Pricing</a></li>
  <li><a href="/support">Support</a></li>
</ul>

</header>

{{> navigation}}が書いてあったところにただそのまま流し込んだだけと言って良い。対してv2.0.0では以下のようにインデントが継承され、最後の改行が重ならないようになる。

<header>
  <ul>
    <li><a href="/">Home</a></li>
    <li><a href="/features">Features</a></li>
    <li><a href="/pricing">Pricing</a></li>
    <li><a href="/support">Support</a></li>
  </ul>
</header>

きれい。この辺りのことはMustacheのspecできちんと定義されてるので、Handlebars.jsが正しく処理するようになったと考えて良さそう。


自前のHTML生成スクリプトでアドホックにパーシャルの最後の改行を消してたとこを削除できたので、すこぶる気分が良い。