Javascriptのテンプレートエンジンを使ってみた
2022/10/28
Webアプリを開発しているとjavascriptで動的にHTML要素(DOMと呼ぶ)を生成して値を埋め込んで表示させる、といったことがよくあります。
僕自身これを実装しようとしたときに今までjavascriptのコードの中でDOMを複製して利用したり、
"<option>" + name +"</option>"
のように直書きして結合するような書き方をすることもありました。
しかし、もっといい方法があるのではと思ったので今更なのですがjavascriptのテンプレートエンジンというものを使ってみました。
テンプレートエンジンは調べてみると色々とありますが、一番手軽そうだったので今回は「lodash.js」の使い方を紹介します。
セレクトボックスの項目を動的に表示させる例
[HTML]
<!-- CDNを読み込み -->
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>
<!-- データ埋め込み先 -->
<select name="shop" id="shop_select">
</select>
<!-- 使用するテンプレート script type="text/template"とすることで表示されない -->
<script type="text/template" id="shop">
<!-- 変数を埋め込みたい箇所は<%= %>で記述 -->
<option value="<%= id %>"><%= name %></option>
</script>
[javascript]
<script>
// テンプレートを取り出してコンパイルする
var compile= _.template(document.getElementById('shop').innerHTML);
var html = "";
// 非同期でデータ取得
$.ajax({
type: "get",
url: "/getShopData",
dataType: "json",
data: {
company_id:company_id,
},
})
.then((response) => {
$.each(response, function(index, value) {
// コンパイルした結果の引数に連想配列でデータを渡す
html += compile({
id: index,
name: value,
});
})
// 埋め込み先を指定
var output = document.getElementById('shop_select');
output.innerHTML = html;
})
.fail((error) => {
});
</script>
上記は一例ですが、javascript側で一切DOMを書かなくて済むのでテンプレートエンジンを使わない場合と比べると格段に見やすくなったと思います。
変数を埋め込むところもPHPで使っているsmartyやbladeなどのテンプレートエンジンの書き方と似ているので個人的に使いやすいと感じました。
例には書いてないですがもちろんforやifも使えます。
ちょっと不便だな~、スマートなやり方がないかな~と思って調べてみると先駆者が便利なツールを作ってくれていたりするので今後も積極的に取り入れていこうと思いました。
----------------------------------------------------------------------
株式会社AQUARIZE
〒531-0072
大阪市北区豊崎3-6-8 TOビル404
電話番号 : 06-7777-2927
税理士の業務に合ったシステム
----------------------------------------------------------------------