为什么不能正常工作?HAML中动态生成的Javascript
:javascript
-[1,2,3].each do |number|
$("#form_#{number}").my_method();
Rails给我一个错误,说变量number
没有定义。
为什么不能正常工作?HAML中动态生成的Javascript
:javascript
-[1,2,3].each do |number|
$("#form_#{number}").my_method();
Rails给我一个错误,说变量number
没有定义。
过滤器的内容不被解释为Haml的。您可以使用#{...}
进行插值,这就是为什么您会看到错误 - 筛选器会在"#form_#{number}"
中看到#{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])}
你有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();
});
或者,如果' $()'表示jQuery,'$ .each([1,2,3],函数(i,数字){...' – nnnnnn 2012-08-06 03:30:59
感谢您的好解释!除非我无法获得'.join(“\ n”)'在ruby 1.9.3上工作的技巧(上面的函数只返回'arr'的内容) – bevanb 2012-08-06 04:03:46
@bevanb note I chang编辑'each'到'map'以及添加'join';你也改变了吗?否则,你看到了什么? (我使用1.9.3,它适用于我)。 – matt 2012-08-06 04:07:35
啊,我错过了从'each'到'map'的改变,谢谢指出。 – bevanb 2012-08-06 04:18:07