jquery.tmpl.jsのテンプレートを外部化して動的に読み込みつつレンダリングするには?
クライアントサイドのテンプレートエンジンは色々あるけれど、JSPに慣れた人間からするとjquery.tmpl.jsが一番わかりやすかった。
BorisMoore/jquery-tmpl · GitHub
ただ、このライブラリは開発が停止している。このライブラリをフォークして開発が続けられているのがこちららしい。
KanbanSolutions/jquery-tmpl · GitHub
こちらのサンプルを参考にすると本当に簡単にできた。
jQuery公式のテンプレートplugin 「jQuery Templates」-JavaScript Library Archive
もはや、サーバーサイドのCPUを使ってHTMLをレンダリングする時代じゃないんだなというのを実感。
ただ、サンプル通りにやるとHTMLのコードが読みづらくなったりエディターでフォーマットしづらくなる。
その辺をどうにかしたいと思って簡単なサンプルアプリケーションを作ってみた。
「行を追加」というボタンをクリックするとlinesパラグラフに行番号と追加日時の行が追加されるというアプリケーション。この行のレンダリングにテンプレートエンジンを使う。
サンプルコード一式
HTMLのコードはこんな風。
ごらんの通り、HTMLにはテンプレートが含まれていない。ここが第1のポイント。
サンプルではHTMLの中にscriptタグを書いて、その中にテンプレートを書いているけれど、これだとエディターでフォーマットがしづらくなる。
そこでまず、行のテンプレートを_template.htmlというファイルに外部化する。外部化すればエディターでフォーマットしやすい。
そして、この_template.htmlをHTTPのGETで動的に読み込む。そのためにはjQueryのgetが使える。ここが第2のポイント。
これはJSPで言えば「@ include file="_template.html"」的なものだ。
main.jsはこんな風。
初期化後、ボタンをクリックするとaddLine()が呼び出されて、置換するパラメーターを作り、テンプレートエンジンでテンプレートを変換し、その変換された行がlinesパラグラフに追加される。
うん。これでスッキリ!
BorisMoore/jquery-tmpl · GitHub
ただ、このライブラリは開発が停止している。このライブラリをフォークして開発が続けられているのがこちららしい。
KanbanSolutions/jquery-tmpl · GitHub
こちらのサンプルを参考にすると本当に簡単にできた。
jQuery公式のテンプレートplugin 「jQuery Templates」-JavaScript Library Archive
もはや、サーバーサイドのCPUを使ってHTMLをレンダリングする時代じゃないんだなというのを実感。
ただ、サンプル通りにやるとHTMLのコードが読みづらくなったりエディターでフォーマットしづらくなる。
その辺をどうにかしたいと思って簡単なサンプルアプリケーションを作ってみた。
「行を追加」というボタンをクリックするとlinesパラグラフに行番号と追加日時の行が追加されるというアプリケーション。この行のレンダリングにテンプレートエンジンを使う。
サンプルコード一式
HTMLのコードはこんな風。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>JSPライクにテンプレート</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="jquery.tmpl.js"></script>
<script src="main.js"></script>
</head>
<body>
<p><button onclick="addLine();">行を追加</button></p>
<p id="lines"></p>
</body>
</html>
ごらんの通り、HTMLにはテンプレートが含まれていない。ここが第1のポイント。
サンプルではHTMLの中にscriptタグを書いて、その中にテンプレートを書いているけれど、これだとエディターでフォーマットがしづらくなる。
そこでまず、行のテンプレートを_template.htmlというファイルに外部化する。外部化すればエディターでフォーマットしやすい。
<div><strong>${lineNum}.</strong> ${date}</div>
そして、この_template.htmlをHTTPのGETで動的に読み込む。そのためにはjQueryのgetが使える。ここが第2のポイント。
これはJSPで言えば「@ include file="_template.html"」的なものだ。
main.jsはこんな風。
//テンプレート
var $template = null;
//行番号
var lineNum = 0;
//初期化
$(document).ready(function() {
//_template.htmlをHTTP GETで読み込んで$templateに代入
$.get("_template.html", function(tmpl) { $template = tmpl; });
});
//行を追加するメソッド
function addLine() {
//行番号インクリメント
lineNum++;
//置換に使うパラメーターオブジェクト作成
var obj = new Object();
obj.lineNum = lineNum;
obj.date = new Date();
//テンプレートをパラメーターオブジェクトの値で置換してlineのパラグラフに追加
$.tmpl($template, obj).appendTo("#lines");
} // END addLine()
初期化後、ボタンをクリックするとaddLine()が呼び出されて、置換するパラメーターを作り、テンプレートエンジンでテンプレートを変換し、その変換された行がlinesパラグラフに追加される。
うん。これでスッキリ!

コメント
コメントを投稿