JsRenderチュートリアル - if、for、propsタグで子テンプレートを読み込む
JavaScript製でjQuery非依存なテンプレートエンジンであるJsRender/JsViewsを使ったチュートリアルを書いてみようと思います。
以前に書いたエントリJsRender入門 - Do You PHP はてなも参照してください。
今回やること
テンプレート内のif、for、propsタグで子テンプレートを指定して値をレンダリングする
コード
<html> <body> <!-- レンダリング結果を表示するスペース --> <div id="result"></div> <script src="https://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript"></script> <script src="http://www.jsviews.com/download/jsviews.min.js" type="text/javascript"></script> <script type="text/javascript"> // if、for、propsタグで子テンプレートを読み込む $(function() { // 表示するデータ var data = { items: [ { name: "りんご", num: 3 }, { name: "いちご", num: 5 }, { name: "バナナ", num: 2 } ], options: { library: "JsRender", language: "JavaScript" } }; // テンプレートに名前(ここでは"linkTemplate")をつけて登録する $.templates({ linkTemplate: "#template" }); // テンプレート"linkTemplate"に変数dataを渡し、 // レンダリング結果を表示 $('#result').html($.render.linkTemplate(data)); }); </script> <!-- テンプレート --> <script id="template" type="text/x-jsrender"> {{for items tmpl="#template_for"/}} {{props options tmpl="#template_props"/}} </script> <script id="template_for" type="text/x-jsrender"> <p>{{:name}}が{{:num}}個あります</p> {{if num < 3 tmpl="#template_if" /}} </script> <script id="template_if" type="text/x-jsrender"> <p>{{:name}}はそろそろ少なくなってきました</p> </script> <script id="template_props" type="text/x-jsrender"> <p>{{>prop}}の値は{{>key}}です</p> </script> </body> </html>
説明
ifタグ(elseも含む)、forタグ、propsタグは、タグ中にデータをレンダリングするテンプレートを指定することができます。この場合、いずれもtmpl属性に続いてテンプレートへのセレクタ(もしくはテンプレート文字列)を指定します。
{{if [条件式] tmpl="[テンプレートへのセレクタ]" /}} {{if [条件式] tmpl="[テンプレートへのセレクタ]"}} : {{else [条件式] tmpl="[テンプレートへのセレクタ]"}} : {{else tmpl="[テンプレートへのセレクタ]"}} : {{/if}} {{for [配列] tmpl="[テンプレートへのセレクタ]" /}} {{props [オブジェクト] tmpl="[テンプレートへのセレクタ]" /}}