slimでhoge.js.slimを書く方法

今やっている個人プロジェクトのテンプレートエンジンはslimを使っています。
erbに比べると完結に書くことができるし、閉じタグを書かなくていいので、htmlを書くのは非常に楽です。

で、ですよ。
昨今のWebアプリはAjaxは当たり前。なので、slimでhoge.js.slimというAjaxでのアクセスに対するレスポンスを書こうとしたら、どうすればいいのか?最初全然わかりませんでした。
ググってみたら、上手に書いている人がいたので、メモ書きとして残します。

| $(".content").append("#{escape_javascript(render "hoge")}"); // _hoge.html.slimをレンダリングしたものをエスケープ

こうです!
slimの場合、先頭に|を持ってくることで、テキストとしてそのまま書くことができます。
Rubyの部分は#{…}の中に書くことができるので、それで対応できるということでした。

しかし、このソースを見ていると個人的にはなんだか気持ち悪いです…。気持ち悪いというかダサいというか…。そこかしこにJavaScriptのコードが散るのはあまり好きでないですし、ましてやassets側のほうはCoffeeScriptで書いているので、ここでJavaScriptかよ…という感じが非常に違和感。

かといってjsonで受け取ってCoffeeScript側でjsonを分解してhtmlを作ってappendするのもダサい。
hoge.html.slimをレイアウトなしで返して、CoffeeScript側のコールバックでappendするのが見た目にもソース的にもよいのかなぁというイメージです。やっぱりhoge.js.slimは止めようかなぁ…。

追記:hoge.js.slimやめました。
やっぱりJavaScriptが散らかるので、止めることにしました。
コントローラー側では、

render layout: false

に設定して、CoffeeScriptのコールバック側でappendしました。
このほうが、CoffeeScript側でやっていることが明確でいいですね。

というわけで、hoge.js.slimはオススメしません。個人的に。


タグ Ruby, Ruby on Rails | パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です