hello-world.jp.net
webエンジニアのメモ。とりあえずやってみる。

[rails]erbとunderscore.jsを一緒に使ったらundefined local variables in templatesエラーが発生

公開日時

erbのテンプレート内にunderscore.js用のテンプレートを記述していたら

undefined local variables in templates

のエラーになってしまいました。

デフォルトだと、erbもunderscoreも <%= xxx %> という記法のため衝突してしまったようです。

そこで、underscore.js側のテンプレート記法を <% ~ %> ではなく {{ ~ }} に変更することにしました。

# app/assets/javascripts/application.js

//= require underscore

_.templateSettings = {
  "interpolate": /\{\{=(.+?)\}\}/g,
  "escape": /\{\{-(.+?)\}\}/g,
  "evaluate": /\{\{(.+?)\}\}/g
};

を記述し、テンプレートを修正

# app/assets/javascripts/sample.js.coffee

<script type="text/template" id="sampleTemplate">
  <p>Hello {{= name }}</p>
</script>

これでテンプレート記法の衝突は回避出来ました。

ただ、if文とかを書くときの書き方が分かりづらくなりますね。。。

{{ if (1){ }}
<p>true</p>
{{ } }}

参考


Related #CoffeeScript

CoffeeScript メモ その1

『 CoffeeScriptファーストガイド』を読んでのメモ その1。

CoffeeScriptでカウントダウンタイマーを作ってみる

参考URLに記載されていたjsのカウントダウンタイマーをCoffeeScriptで書いてみました。