ここで大きな頭痛の種になることはありません。Ruby ハンドラーには、最も単純な JS 以外のものを入れないでください。
format.js { render :js => "colorizeTest()" }
次に、ページ上または含まれているスクリプトを介して、関数を宣言します。
var colorizeTest = function() {
$('#test').html('<div class="colorize">Test</div>');
};
Ruby に JS を入れないでください。
または、実際のビュー テンプレートを使用できます。
# controller code
@some_id = 'test'
# JS format Handler
format.js
# views/whatever.ejs.js
$('#<%= @some_id %>').html('<div class="colorize">Test</div>');
または両方を行います!この例では、これだけの抽象化はばかげていますが、この JS が少しでも複雑なことを実行し始めるとすぐに、これが最善の方法になります。生成された js 応答を介して、より少ないコードでより多くのデータを渡します。実際に複雑な js ロジックは、常に静的にページに含める必要があります。
# controller code
@some_id = 'test'
# JS format Handler
format.js
// js funciton on page
var colorizeTest = function(id) {
$('#' + id).html('<div class="colorize">Test</div>');
};
# views/whatever.ejs.js
colorizeTest(<%= @some_id %>);
最後に、真の「最善の」方法は、サーバーから JSON をレンダリングすることだけであり、AJAX を介してそれをフェッチし、そのデータに基づいてページで何をするかを処理する JS を静的に含めていると主張するかもしれません。このようにして、サーバー側で実行可能な JavaScript を「生成」することはまったくなく、非常にクリーンです。
// js file somewhere
var colorizeTest = function(id) {
$('#' + id).html('<div class="colorize">Test</div>');
};
var doStuff = function() {
$.getJSON("/whatever.json", function(data) {
colorizeTest(data.id);
});
};
# rails controller
render :json => { :id => 'test' }
Ruby に JS がまったく含まれていないことがわかりますか? または、あなたのJSにルビーがありますか?サーバーとクライアントの間でデータを送信するだけです。いいですね。好きなだけ。