対象読者
- JavaScriptテンプレートエンジンに興味のある方
- JavaScript、jQueryの基本を理解している方
必要な環境と準備
JsRenderとjQueryを以下のサイトからダウンロードしてください。詳しくは、第1回を参照してください。
カスタムコンバーター
コンバーターを使用すると、テンプレートで指定した値を変換してから出力できます。例えば、HTMLコンバーターを使用すると、値はHTMLエンコードしてから出力されます。第2回で紹介したように、JsRenderには標準でHTMLコンバーター、属性コンバーター、URLコンバーターが備わっています。同様に、カスタムコンバーターと呼ばれる独自のコンバーターを定義できます。
コンバーターとは引数を受け取り、それを変換した値を返す関数です。コンバーターを使用するには、renderメソッドを呼び出す前にコンバーターを登録します。$.views.convertersメソッドを呼び出し、引数にコンバーター名とコンバーターの関数を渡します。
定義したコンバーターを使用するには、{{コンバーター名:値}}のように、コロンの前にコンバーター名を指定します。
<!-- テンプレートの定義 -->
<script id="itemTemplate" type="text/x-jsrender">
更新日:{{date:lastModified}}<br/>
</script>
<script type="text/javascript">
// データモデルの定義
var item = {
lastModified: new Date("2013/10/10 18:00:00")
};
// コンバーターの定義
$.views.converters("date", function(value){
return value.toLocaleDateString();
});
// テンプレートを使ったテキストの生成
var result = $("#itemTemplate").render(item);
// div要素の中身を入れ替える
$("#placeholder").html(result);
</script>
複数のコンバーターを同時に登録できます。$.views.convertersメソッドを呼び出し、コンバーター名をキー、関数を値とする連想配列を渡します。
$.views.converters({
date: function(value){ return value.toLocaleDateString(); },
time: function(value){ return value.toLocaleTimeString(); }
});
複数の引数を持つコンバーター
コンバーターには複数の引数を持たせることができます。{{コンバーター名:引数1 引数2}}のように、JsRenderのタグの中にスペース区切りで複数の引数を指定します。
<script id="itemTemplate" type="text/x-jsrender">
名前:{{name:firstName lastName}}
</script>
$.views.converters("name", function(firstName, lastName){
return firstName + " " + lastName;
});
パラメーターによって動作を変えるコンバーター
タグの中にパラメーターを指定できます。{{コンバーター名:引数 パラメーター名=パラメーター値}}のようにパラメーターを指定し、コンバーター関数からは、thisオブジェクトを用いてパラメーターの値を取得します。コンバーター関数の中で、thisオブジェクトはタグのインスタンスを指しており、this.tagCtx.props連想配列にプロパティの値が格納されています。
<script id="itemTemplate" type="text/x-jsrender">
名前:{{name:firstName lastName order="LastFirst"}}
</script>
$.views.converters("name", function(firstName, lastName){
if(this.tagCtx.props.order == "LastFirst")
return lastName + ", " + firstName;
else
return firstName + " " + lastName;
});
