왜 작동하지 않습니까?HAML 내에서 동적으로 생성 된 자바 스크립트
:javascript
-[1,2,3].each do |number|
$("#form_#{number}").my_method();
레일 변수 number
가 정의되어 있지 말하는 나에게 오류를 제공합니다.
왜 작동하지 않습니까?HAML 내에서 동적으로 생성 된 자바 스크립트
:javascript
-[1,2,3].each do |number|
$("#form_#{number}").my_method();
레일 변수 number
가 정의되어 있지 말하는 나에게 오류를 제공합니다.
필터의 내용은 HAML으로 해석되지 않습니다. 그러나 보간에 #{...}
을 사용할 수 있습니다. 그 이유는 필터가 #{number}
이 "#form_#{number}"
인 것을보고 있지만, number
이 정의 된 위의 행은 단순히 그대로 전달되고 루비로 처리되지 않으므로 훨씬 멀리 있습니다. Ruby가 걱정하는 것처럼 number
은 아직 정의되지 않았습니다. 그 조금 다루기 비록
:javascript
#{[1,2,3].map do |number|
"$(\"#form_#{number}\").my_method();"
end.join("\n")}
: 당신이 뭔가를 할 수있다이 경우
.
명확한 솔루션을 사용하면 필터에서 호출 할 수있는 자바 스크립트를 생성하는 도우미 메서드를 만들 수 있습니다 경우,
:javascript
#{create_js([1,2,3])}
자바 스크립트에 루비 구문이 있는데 분명히 작동하지 않습니다. underscore.js와 같은 라이브러리를 사용하여 다음과 같이 배열을 반복 할 수 있습니다.
_.each([1, 2, 3], function(number){
$("#form_" + number).my_method();
});
시도해보십시오.
또는 당신은 jQuery의 각 사용할 수 있습니다
$.each([1, 2, 3], function(i, number){
$("#form_" + number).my_method();
});
을 것
def create_js(arr) arr.map do |number| "$(\"#form_#{number}\").my_method();" end.join("\n") end
과 HAML을 또는' $()'는 jQuery를 나타내며, $ .each ([1,2,3], function (i, number) {...' – nnnnnn
위대한 설명을 주셔서 감사합니다! '.join ("\ n")'루비 1.9.3에서 작동 함 (위의 함수는'arr'의 내용을 반환합니다) – bevanb
@bevanb note I chang 'each'를'map'에 추가하고'join'을 추가합니다; 너도 그걸 바꿨 니? 그렇지 않으면 무엇이 보이나요? (나는 1.9.3을 사용하고 있고 그것은 나를 위해 일한다). – matt
아, 나는 '각'에서 '지도'로의 변경을 놓쳤습니다. 그 점을 지적 해 주셔서 감사합니다. – bevanb