[Front-End General] Underscore.js のテンプレートエンジンを利用する

レイアウトとロジックを分離する。

  • jQuery 3.1.0
  • underscore.js 1.8.3

こちらとの比較。

Underscore.js を利用したサンプル

Underscore.js を利用して、レイアウトとロジックを分離する。

JavaScript では、テンプレートの id に対して _.template を利用する。

    .done((data) => {
      $('#comment').empty();
      $('#count').text(data.count + '件');
      const compiled = _.template($('#bm').text());
      for (let bookmark of data.bookmarks) {
        if (bookmark.comment) {
          $('#comment').append(compiled({
            timestamp: bookmark.timestamp,
            comment: bookmark.comment
          }))
        }
      }
    })

HTML テンプレート側に表示系を <% を利用して書く。
<%- でエスケープして出力。
ERB と同じなので個人的には分かりやすい。

<script id="bm" type="text/x-underscore">
  <li><%- timestamp %>: <%- comment %></li>
</script>

if や for も利用できるが、view template に持っていくと <% _.each() などを書かなければいけないので、可読性や分業を考えると問題がありそう。

view template にロジックを持ちたくないので、これでいいのかも知れない。

script type 属性について

MIME Type に沿って指定するとのこと。

標準化されている訳ではないので、x- で始める適当な名前を付ければ良い。

See the Pen Underscore & Ajax $.getJSON by DriftwoodJP (@DriftwoodJP) on CodePen.

補遺

Backbone.js では Underscore.js を利用する。