QA@IT

RailsでView毎のJavascriptはどこにかけばいいのか?

6528 PV

現在、Rails3.2で開発しているのですが、View毎のJavascriptをどこにかけばいいのかわかりません。

具体例をあげて説明すると、
例えば、

window.onload = function(){
}

とか、

$("button").keydown(function(e){
}

のような「画面がロードされたときorボタンが押されとき、〜する」みたいな処理を書く場合、asset:precompileの対象になる場所(assets/javascript/ フォルダ以下?)に書いてしまうと、全てのViewに適用されてしまうと思います。

なので現在は、bind系はerb内に直接記述して、中で呼ばれる処理はassets以下のjavascriptファイルにして書いているのですが、これだと問題が2つ発生します。

  • 1つめは、ほんの小さな処理までもメソッド化しなくてはならない。

これは例えば、

$("button").hidden = YES;

のような、「ボタンを押したときに、ボタンを隠す」みたいなほんのちょっとした処理を書くにも、メソッドを切らなければいけなくなり、面倒です。

  • 2つめは、1つめの手段が面倒なので直接erbに書くと、erbがふくれ始める。

これはそのままで、bindが一つのview内に5つぐらいあったばあい、一つ一つは少量でもつもってhtmlとjavascriptの見分けがつきずらくなってきます。

ここで改めて質問なのですが、
このような問題を解決する方法やGem等はありませんか?

私の個人的な見解としては、「設定より規約」の概念で、erb名に対応するJavascriptファイルを作成すると、自動で読み込んでくれる。 みたいな機能があればと思っています。

ご回答お待ちしております。

回答

手前味噌ですが。

http://qiita.com/Oakbow/items/2e712e05bb4bbf68faf5

AssetPipelineでapplication.jsにまとめられるのは単にそういうデフォルト設定って言うだけの話で、変更可能です。
ViewごとのJSファイルを作りたいのなら、application.jsにまとめられないようにすればいいと思います。

erb内に書いてすむのならそれでもいいような気もするのですけどね。
乱暴ですがパフォーマンスがそれほど気にならないのならば、パーシャルに追い出すという手も。。。

うちとこではコントローラ単位でJSファイルを読み込んだり、erbから指定したJSファイルをyield使ってレイアウト側で読み込んだりとかしてます。
そういう目的のGemとかありそうな気もしますけど、どうなんでしょうね。

編集 履歴 (0)
  • なるほど、確かにおとなしく個々のerbに個々のjsファイルを指定するのが無難かもしれませんね。ありがとうございました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。