如何使用嵌入式ruby动态创建jquery选择器(在.js.erb文件中)?

时间:2012-05-30 20:24:28

标签: javascript jquery ruby-on-rails ruby erb

作为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") ) %>")部分已正确发送到浏览器,即&lt;%= ...%&gt;表现如预期的那样,浏览器上的javascript收到了.html函数中传递的格式良好,引用(和转义)的html。

任何人都对如何避免在.js.erb文件中使用.concat有任何想法?

2 个答案:

答案 0 :(得分:10)

喜欢这个

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

如果您放置&lt;%=%&gt;在js.erb文件中,该代码被评估为在结果JS中打印。您可以构造任何您想要的唯一字符串。 可能:classname_:id是最常见的解决方案。

顺便说一句,评估的代码不必是字符串。 &LT;%=%GT;调用.to_s进行打印。在该示例中,@ user.id被转换为字符串。

答案 1 :(得分:0)

ids是你可能做的独特的

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