Mustache.js の Functions

社内で Mustache.js にヘルパーなくて使いづらいって話がありました。

んで、先ほどプラグインとかないのかなと見ていましたら、 github の README.md に Functions という章がありました。

これは使えるんじゃないかと、試しました。

ディレクトリ構造

$ tree
.
├── index.html   # サンプルHTML
├── mustache.js  # Mustache.js
└── zepto.min.js # Zepto.js

HTMLファイル

bold って関数を作ってそれを使う。 

実運用時は、data をヘルパー関数群を登録したオブジェクトから生成する ( Object.create(SomeObject) ) 感じかな。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>A Mustache.js sample.</title>
  </head>
  <body>
    <h1>There is mustache!</h1>                                                                                               
    <div id="sandbox"></div>
    <script id="sampleTpl" type="text/template">
      <p>{{#bold}}{{msg}}{{/bold}}</p>
    </script>
    <script src="zepto.min.js" type="text/javascript"></script>
    <script src="mustache.js" type="text/javascript"></script>
    <script type="text/javascript">
      (function() {
        // テンプレートを読み込む
        var template = $('#sampleTpl').html();
        // 表示用変数を初期化する
        var data = {
          msg: 'hoge fuga piyo.',
          bold: function() {
            // 入力値と、描画用関数が渡ってくる
            return function(text, render) {
              return ['<b>', render(text), '</b>'].join('');
            };
          }
        };
        // 書き出し
        var html = Mustache.to_html(template, data);
        $('#sandbox').html(html);
      })();
    </script>
  </body>
</html>