LoginSignup
40
45

More than 5 years have passed since last update.

lodash.js (underscore.js)でのtemplateの使い方

Last updated at Posted at 2016-02-22

要件

例)フロントエンドでajaxで取ってきたデータに応じて下記テーブルに要素の追加を行いたいなぁって時、、、

ìndex.html
<table id="userInfo">
    <tr>
        <td>名前</td>
        <td>性別</td>
        <td>職業</td>
    </tr>
</table>

jQueryだけでやると

script.js
$.ajax({
  url: ajaxurl,
  type: "GET",
  timeout: 10000
}).done(function(result, textStatus, xhr) {
  for (var i = 0; i < result.length; i++) {
    var $tr = $("<tr></tr>");
    $tr.append("<td>" + result[i].name + "</td>")
        .append("<td>" + result[i].gender + "</td>")
        .append("<td>" + result[i].job + "</td>");
    $("#userInfo").append($tr)
  }
}).fail(function(xhr, textStatus, error) {
  console.log("error");
});

こんなんかな?(もうちょっとマシなやり方あると思いますが)

問題点

htmlをどう書くかがjavascript内に記載してあるのちょっと生理的に受け付けない

ってことでtemplateを使うと
htmlはhtml内に書けるのですっきりします

templateの使い方

まずはhtmlにtemplateを追記しましょう

index.html
<script type="text/html" id="lodashTemplate_userData">
  <tr>
      <td><%= name %></td>
      <td><%= gender %></td>
      <td><%= job %></td>
  </tr>
</script>

javascriptも結構すっきり

_.template にhtml内のテンプレートを記載した部分を入れてテンプレを作成したら、あとは対応するデータを入力すると対応したhtmlを吐き出してくれます。

script.js
$.ajax({
  url: ajaxurl,
  type: "GET",
  timeout: 10000
}).done(function(result, textStatus, xhr) {
  var compiled = _.template($("#lodashTemplate_userData").html());
  for (var i = 0; i < result.length; i++) {
    $("#userInfo").append(
      compiled({
        "name": result[i].name,
        "gender": result[i].gender,
        "job": result[i].job,
      }));
  }
}).fail(function(xhr, textStatus, error) {
  console.log("error");
});

※lodashを読むのを忘れないように

まとめ

これでjavascriptがhtmlに汚染されずにすむような気がします:innocent:

40
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
45