1

基本的に、コントローラー アクションに Respond_to ブロックがあります。

respond_to do |format|
  format.js { render :js => "$('#test').html('<div class='colorize'>Test</div>');" }
end

colorizeまた、js を介してレンダリングされる div ブロックにcss クラスを追加しようとしていますが、そこで引用符を使用するとコードが壊れます。追加されたクラスでこれを機能させるにはどうすればよいですか?

4

3 に答える 3

5

ここで大きな頭痛の種になることはありません。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にルビーがありますか?サーバーとクライアントの間でデータを送信するだけです。いいですね。好きなだけ。

于 2012-12-05T22:27:53.567 に答える
4

バックスラッシュ?

" ' \" \' \\\" \\\' \\\\\" \\\\\' ... \\\\\' \\\\\" \\\' \\\" \' \" ' "
于 2012-12-05T22:25:31.377 に答える
3

バックスラッシュの代わりに、

%Q[$('#tes­t').html("­<div class­='colorize­'>Test</div>");]

ただし、これは JavaScript ではなく Ruby です。純粋な JavaScript 内では、%q/%Qは使用できません。

編集: また、アレックス・ウェインが最高のアドバイスをしています。

于 2012-12-05T22:27:22.210 に答える