JaLism - JavaScriptテンプレートエンジン

What's this?

Ajaxコンテンツの開発など、JavaScriptでHTMLを書き出す機会が増えてきた昨今。通常のDOM操作やinnerHTMLでは追いつかなくなってきました。サーバサイドの言語でテンプレートエンジンが普及したように、今後はJavaScriptのテンプレートエンジンも求められてくるのではないでしょうか。JSmartyのような高度なライブラリもありますが、もっとお手軽なものを書いてみました。

How to use

JaLismは、単体のJavaScriptファイル「JaLism.class.js」として提供されます。他のライブラリには依存しませんので、このファイルを読み込むだけで使用できます。各機能は、JaLismクラスのメソッドとして実装されています。

現在のところ、テンプレート変数のアサインと、テンプレートファイルの読み込みのみ対応しています。

最も簡単な使用方法は以下のようになります。

var j = new JaLism();
j.assign('var', '変数です');
alert(j.fetch('test.tpl'));

1行目でオブジェクトを生成し、2行目で変数をアサイン、3行目でテンプレートを呼び出しています。この場合、別途テンプレートファイルをtest.tplとして用意する必要があります。test.tplの内容は以下のようになります。

{$var}

Sample

テンプレート変数に文字列、配列、ハッシュをアサインし、それぞれを呼び出しています。
実際の実行結果はこちら

test.html

<html>
 <head>
  <title>JaLism test</title>
  <script type="text/javascript" src="JaLism.class.js"></script>
  <script type="text/javascript">
window.onload = function() {
    var j = new JaLism();
    j.assign('key', 'きー');
    j.assign('value', 'あたい');
    j.assign('param', ['apple', 'banana']);
    j.assign('hash', {"one":"わん", "two":"つー"});
    document.getElementById('result').innerHTML = j.fetch('test.tpl');
}
  </script>
 </head>
 <body>
  <div id="result" style="border:1px solid #666"></div>
 </body>
</html>

test.tpl

<p>{$key}:{$value}</p>
<p>{$param[0]} and {$param[1]}</p>
<p>{$hash.one} {$hash.two}</p>

出力結果

きー:あたい

apple and banana

わん つー

Download

右クリックで保存するなどしてください。

JaLism.class.js - ver.0.0.2 2007/02/22(Thu)

Class Methods

ユーザーが使用するメソッドは以下の通りです。

void assign(string key, mixed value)

テンプレート変数keyにvalueを代入します。
valueには文字列だけでなく、配列やハッシュを指定することが可能です。

string fetch(string filename)

指定したテンプレートファイルを読み込んで、その内容を返します。

Customize

現在、デリミタの変更のみ対応しています。

var j = new JaLism();
j.left_delimiter  = '<%';
j.right_delimiter = '%>';

のように設定すると、テンプレートファイル中で変数を <%$value%> のように記述できるようになります。

デリミタに設定する文字列は、JavaScriptのRegExpオブジェクトによる正規表現にそのまま投げられます。 [%$value%] と書きたい場合は、

var j = new JaLism();
j.left_delimiter  = '\\[%';
j.right_delimiter = '%\\]';

としてやる必要があります。また、デリミタ内のスペースを無視するような高級な処理はしていませんので、上記の設定では $value の前後にスペースを入れて [% $value %] のように書くことはできません。この場合はスペースまでデリミタとして登録しなければなりません。また、その場合は当然ですがスペースを省略した場合はデリミタを認識できません。

▲ページの先頭に戻る