[[JSライブラリ]] > Mustache.js
* Mustache.js [#qecb99a0]
#setlinebreak(on)
#contents
** Mustache.js とは [#z1ee7b5a]
#html(<div style="padding-left:20px;">)
JavaScriptのテンプレートエンジン
#html(</div>)
** 利用準備 [#v759aa49]
#html(<div style="padding-left:20px;">)
https://github.com/janl/mustache.js/ からダウンロードした js をヘッダで読み込む
#myhtmlcode(){{
<head>
<meta charset="utf-8" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="mustache.min.js"></script>
</head>
 ・
 ・
}}
#html(</div>)
** 単純な値の展開 [#v43c0d77]
#html(<div style="padding-left:20px;">)
#mycode(){{
var view = {
  title: "Joe",
  // 関数を指定する事も可能
  calc: function () {
    return 2 + 4;
  }
};
var output = Mustache.render("{{title}} spends {{calc}}", view);
}}
#html(</div>)
** リストの展開 [#e2a8bad2]
#html(<div style="padding-left:20px;">)
#myhtmlcode(){{
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="jquery.min.js"></script>
<script src="mustache.min.js"></script>
<script type="text/javascript">
$(function(){
    var template = $("#result").html();
    var html = Mustache. render( template, {
         book : [
             {title : "タイトル1", price : 1000 }
            ,{title : "タイトル2", price : 2000 }
            ,{title : "タイトル3", price : 3000 }
            ,{title : "タイトル4", price : 4000 }
            ,{title : "タイトル5", price : 5000 }
        ]
       ,priceAndTax : function(){
            return this.price * 1.08
        }
    });
    $("#result").html(html);
});
</script>
</head>
<body>
<div id="result">
<ul>{{#book}}<li>{{title}} : {{price}}円 税込:{{priceAndTax}}</li>{{/book}}</ul>
</div>
</body>
</html>
}}
#html(</div>)
** 条件分岐 [#j675a719]
#html(<div style="padding-left:20px;">)
HTML
#myhtmlcode(){{
一覧<br />
<div id="result2">
<ul>{{#person}}<li>{{name}} : 年齢:{{price}} 性別:{{sexJp}}</li>{{/person}}</ul>
</div>
<hr />
男性のみ<br />
<div id="result3">
<ul>{{#person}}{{#isMan}}<li>{{name}} : 年齢:{{price}} 性別:{{sexJp}}</li>{{/isMan}}{{/person}}</ul>
</div>
}}
JavaScript
#mycode(){{
$(function(){
    var personData = {
        person : [
            { name:"taro"  , age: 20, sex: "man" }
           ,{ name:"hanako", age: 25, sex: "woman"}
           ,{ name:"ichiro", age: 30, sex: "man"}
           ,{ name:"jiro"  , age: 35, sex: "man"}
        ],
        sexJp : function(){
            if (this.sex == "man"){
                return "男性";
            } else if (this.sex == "woman") {
                return "女性";
            } else {
                return "不明";
            }
        },
        isMan : function(){
            return (this.sex == "man");
        }
    };
    var template2 = $("#result2").html();
    var html2 = Mustache.render( template2, personData);
    $("#result2").html(html2);
    var template3 = $("#result3").html();
    var html3 = Mustache.render( template3, personData);
    $("#result3").html(html3);
});
}}
#html(</div>)