为什么这不起作用?
:javascript
-[1,2,3].each do |number|
$("#form_#{number}").my_method();
Rails给我一个错误,说没有定义变量number
。
答案 0 :(得分:6)
过滤器的内容不会被解释为Haml。您可以使用#{...}
进行插值,这就是您看到错误的原因 - 过滤器会看到#{number}
中的"#form_#{number}"
,但上面的行会定位number
简单地按原样传递,不被视为Ruby,因此就Ruby而言number
仍未定义。
在这种情况下,您可以执行以下操作:
:javascript
#{[1,2,3].map do |number|
"$(\"#form_#{number}\").my_method();"
end.join("\n")}
虽然这有点笨拙。
更清晰的解决方案可能是创建一个帮助方法来创建javascript,您可以从过滤器调用:
def create_js(arr)
arr.map do |number|
"$(\"#form_#{number}\").my_method();"
end.join("\n")
end
和Haml将是
:javascript
#{create_js([1,2,3])}
答案 1 :(得分:0)
你的javascript中有ruby语法,这显然不起作用。您可以使用像underscore.js这样的库,并像这样遍历您的数组:
_.each([1, 2, 3], function(number){
$("#form_" + number).my_method();
});
试试。
或者你可以使用jQuery:
$.each([1, 2, 3], function(i, number){
$("#form_" + number).my_method();
});