カテゴリー:
Rails
タグ:
 Rails JavaScript JavaScriptテンプレート

このエントリーをはてなブックマークに追加
更新日時:
2013年03月18日(月)
作成日時:
2013年03月18日(月)

前の記事 / 次の記事

混乱の原因は JavaScriptCoffeeScriptErbHaml が共存してること。

おさらい

ビューテンプレート

$ vi call_ajax.html.haml
-# haml
=link_to("ajaxな処理", "path_to_excute_ajax", data: {remote: true})

JavaScriptテンプレート
(アクション名が"excute_ajax"だったらデフォルトで"excute_ajax.erb.js"が呼ばれる)

$ vi excute_ajax.erb.js
alert("called!");

jQueryと組み合わせて

$ vi excute_ajax.erb.js
$("#menu").html("<%= j(render "menu") %>");

で、この時、拡張子を指定することで、
生のJavaScript、CoffeeScript、Erb、Hamlをそれぞれ好きなように組み合わせて使うことが出来る、
ような雰囲気を漂わせているけど微妙に出来ない、か俺がやり方を知らない、という話。

生のJavaScriptにErbを埋め込んで使う
.erb.js
CoffeeScriptにErbを埋め込んで使う
.js.coffee
生のJavaScriptにHamlを埋め込んで使う
.js.haml
但しインデントと命令の途中の改行を入れられない(なんで?)
CoffeeScriptにHamlを埋め込んで使う
出来ない?

混乱の原因

  • CoffeeScript + Haml が使えそうな気がするけど使えない?
  • JavaScript + Erb の時の拡張子は .erb.js だけど、JavaScript + Haml の時の拡張子は .js.haml
  • JavaScript + Haml にした場合はインデントと命令途中の改行を使えない

という訳で現実的にはJavaScriptテンプレートの中でHamlを使うっていう選択肢はなくて、
JavaScript + Erb (.erb.js)、もしくは CoffeeScript + Erb (js.coffee) の二択ということでしょうか。

この中途半端っぷりがRailsらしくないから
他にスマートな解法がありそうな気がするんだけど分からん。

そもそもJavaScriptテンプレートじゃなくてjson使えよって話なのかも知れない。

それでもjson使わないよっていう場合、Rubyコードの埋め込みはそれぞれ次の通り、

.erb.js

"#{j(@article.name)}"

js.coffee

"<% j(@article.name) %>"

参考ページ