Hatena::ブログ(Diary)

naoyaのはてなダイアリー

February 07, 2006

JSON を Template-Toolkit で展開する Jemplate

Jemplate is a templating framework for Javascript that is built over Perl's Template Toolkit (TT2).

Jemplate parses TT2 templates using the TT2 Perl framework, but with a twist. Instead of compiling the templates into Perl code, it compiles them into Javascript.

Jemplate - Javascript Templating with Template Toolkit - search.cpan.org

かぜぶろさんや宮川さんがブックマークしてたので気になってちょっと見てみた新着モジュールの Jemplate。なかなか面白いです。Template-Toolkit で記述したテンプレートのテンプレート変数に JavaScript 上の JSON を展開させることができるというもの。

つまり、

<h1>[% title %]</h1>

というテンプレートに対して

{ title : 'My Homepage' }

という JSON を渡すと、[% title %] が展開されて "My Homepage" になると。

仕組みが結構面白くって、まず最初に jemplate というコマンドラインツールで TT のテンプレートを JavaScript に変換(コンパイル)して、その JavaScript を HTML でロードする、という具合。template/body.html というテンプレートを用意して以下のようにテンプレートを記述して、

<h1>[% title %]</h1>

<p>[% description %]</p>

これを jemplate コマンドでコンパイルする。

$ jemplate --compile template/* > js/jemplate01.js

このコンパイルされたコードと、Jemplate ディストリビューションに付属する Jemplate.js を HTML からロードして、Jemplate.process() にテンプレート名と JSON を渡す。

<html>
<head>
<title>Jemplate!</title>
<script type="text/javascript" src="../js/Jemplate.js"></script>
<script type="text/javascript" src="../js/jemplate01.js"></script>
</head>
<body>

<script type="text/javascript">
document.writeln(
  Jemplate.process(
    'body.html',
    {
      title : 'うはー夢がひろがりんぐ!', 
      description : 'Jemplate!'
    }
  )
);
</script>

</body>
</html>

すると、body.html テンプレートに JSON が渡って展開されて、ご所望の出力が得られますと。

Jemplate の機能はまだ変数を展開するぐらいしかサポートされていないようですが、これがループやその他さまざまな機能を使えるようになったら熱いですね。サーバーサイドのアプリケーションから JSON を返してその JSON を TT で展開して画面描写ってことができる。Ajax アプリケーションを書くのが相当楽になりそう。

期待age。