Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

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="[テンプレートへのセレクタ]" /}}

JSFiddleで動作を見る