category

RailsのJavascript(非アセットパイプライン)

RailsアプリケーションでもJavascriptを多用していますが、当初からアセットパイプラインに乗ることなく開発を進めています。

Javascriptのライブラリを導入する場合、Railsのレイアウトテンプレートでライブラリをインクルードして、個別の関数を各Viewファイルで定義すると構造が比較的クリアになります。

その際、レイアウトテンプレートでyieldを活用して以下のように配置すると、Javascriptライブラリの初期化後にページ内で定義した関数を注入することができ、トラブルを減らせます。

<html>
<head>
<link rel="stylesheet" href="some-css-framework.css" />
</head>
<body>
<%= yield %>
<script src="some-javascript-library.js"></script>
<script>some_library_init();</script>
<%= yield :js_code %>
</body>
</html>

このテンプレート例では、各Viewファイルでcontent_forブロックを記述することで、yield :js_codeのERBタグをリプレースできます。

<% content_for :js_code do %>
<script>
call_library_specific_function();
</script>
<% end %>

また、content_forの記述位置にはとくに制約がないため、場合によっては、イベントをアタッチするDOMなど、関連するHTMLブロックとのコード凝集性を高める可能性もあります。