3

ajax呼び出しの一部として、埋め込みrubyを使用して、.js.erbファイルでjqueryselectのid部分を生成しようとしています。以下は私がそれを機能させる方法ですが、サーバー上にjqueryセレクターを構築する代わりに、少し手を使ってブラウザーでjavascriptを取得し、IDをセレクターに連結する必要がありました。

$("tr.design#".concat(<%= @form_column.form_row.id.to_s %>)).html("<%= escape_javascript( render(:partial => "form_rows/row") ) %>")

私はいくつかの組み合わせを試しました:

$(<%= escape_javascript("tr.design#" << @form_column.form_row.id.to_s) %>)

$(<%= "tr.design#" << @form_column.form_row.id.to_s %>)

$("tr.design#<%= @form_column.form_row.id.to_s %>")

いずれの場合も、クライアントに返されたセレクターは$(tr.design#17)(引用符なし)であったため、クライアントで希望どおりに実行されませんでした。つまり、jqueryは一致するものを見つけられませんでした。

この.html("<%= escape_javascript( render(:partial => "form_rows/row") ) %>")部分はブラウザに正しく送信されました。つまり、<%= ...%>は期待どおりに動作し、ブラウザのjavascriptは、.html関数で渡された適切にフォーマットされ引用された(エスケープされた)htmlを受信しました。

.js.erbファイルで.concatの使用を回避する方法について誰かがアイデアを得ましたか?

4

2 に答える 2

10

このような

$('#user_<%= @user.id %>').click(blah blah blah);

<%=%>をjs.erbファイルに配置すると、そのコードは結果のJSに出力されて評価されます。必要な任意の一意の文字列を作成できます。おそらく:classname_:idが最も一般的な解決策です。

ちなみに、評価されるコードは文字列である必要はありません。<%=%>は、印刷のために.to_sを呼び出します。この例では、@user.idが文字列に変換されます。

于 2012-05-30T23:09:05.400 に答える
0

IDはおそらくあなたができるユニークなものです

$("#"+<%= @form_column.form_row.id.to_s %>)
于 2012-05-30T20:28:07.993 に答える