なぜこれが機能しないのですか?
:javascript
-[1,2,3].each do |number|
$("#form_#{number}").my_method();
number
Railsは、変数が定義されていないというエラーを表示します。
なぜこれが機能しないのですか?
:javascript
-[1,2,3].each do |number|
$("#form_#{number}").my_method();
number
Railsは、変数が定義されていないというエラーを表示します。
フィルターの内容は Haml として解釈されません。ただし、補間には使用でき#{...}
ます。そのため、エラーが表示されます。フィルターは#{number}
in"#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
そしてハムルは
:javascript
#{create_js([1,2,3])}
JavaScript内にルビー構文があり、明らかに機能しません。underscore.js のようなライブラリを使用して、次のように配列を反復処理できます。
_.each([1, 2, 3], function(number){
$("#form_" + number).my_method();
});
それを試してみてください。
または、jQuery のそれぞれを使用できます。
$.each([1, 2, 3], function(i, number){
$("#form_" + number).my_method();
});