4

なぜこれが機能しないのですか?

:javascript
    -[1,2,3].each do |number|
        $("#form_#{number}").my_method();

numberRailsは、変数が定義されていないというエラーを表示します。

4

2 に答える 2

6

フィルターの内容は 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])}
于 2012-08-06T03:41:29.413 に答える
0

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();
});
于 2012-08-06T03:27:51.917 に答える