テンプレートエンジンJQuery TemplatesをJadeから利用する

特に、パラメータの参照が似ていてよく間違える。
JQueryっぽい方は「$」を使う、と覚えよう。

二つのテンプレートエンジンの違いについて

JadeもJQuery Templatesもテンプレートエンジンには違いないが、
Node.jsのWebフレームワークexpressにも搭載されているJadeと、
言わずとしれたJQueryの名を冠する(?) JQuery Templatesとでは役割が随分違う。

JadeはサーバサイドでテンプレートからHTMLを生成するのに対して、
JQuery Templateはクライアントサイドからこれを行う。

もちろん相互利用することも可能だが、それぞれのシンタックスが似ておりやや混乱してしまう。

Jade

インデントでHTMLの入れ子構造を表現する。

- var Image = "hello.png"
html
  head
  body
    img(src="#{Image}")

このテンプレートから以下のHTMLが生成される。

<html>
  <head></head>
  <body><img src="hello.png"/></body>
</html>

この例ではJade側で直接JavaScriptの変数を定義しているが、Node.jsで書かれたコード上の変数も普通に使えるので便利。

JQuery Templates

JQuery TemplatesをJade上から利用する時は以下のような感じになると思う。
鋳型ともいえるテンプレートにオブジェクトを流し込む。
もちろん、リストを流し込めばその分だけ反復してくれたりもする。

html
  head
    script(type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js")
    script(type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.js")
  body
    #example

script(id="example-tmpl" type="text/x-jquery-tmpl")
  img(src="${Image}")

script(type="text/javascript")
  |$('#example-tmpl').tmpl([{Image: 'Image1.png'}, {Image: 'Image2.png'}])
  |  .appendTo('#example')
<html>
  <head>
    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js"></script>
    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.js"></script>
  </head>
  <body>
    <div id="example"><img src="Image1.png"><img src="Image2.png"></div>
    <script id="example-tmpl" type="text/x-jquery-tmpl"><img src="${Image}"/></script>
    <script type="text/javascript">
      $('#example-tmpl').tmpl([{Image: 'Image1.png'}, {Image: 'Image2.png'}])
      .appendTo('#example')
    </script>
  </body>
</html>

困った点

とにかく変数の参照方法が似ていてややこしい。

#{Var}  Jade
${Var}  JQuery Template

JQueryっぽい方は「$」を使う、と覚えよう(再掲)。