3

作为 ajax 调用的一部分,我正在尝试使用嵌入式 ruby​​ 在 .js.erb 文件中生成 jquery select 的 id 部分。下面是我如何让它工作的,但我不得不稍微动一下手,让浏览器中的 javascript 将 id 连接到选择器,而不是在服务器上构建 jquery 选择器。

$("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 回答