2012-08-06 3 views

답변

4

필터의 내용은 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])} 
+0

위대한 설명을 주셔서 감사합니다! '.join ("\ n")'루비 1.9.3에서 작동 함 (위의 함수는'arr'의 내용을 반환합니다) – bevanb

+0

@bevanb note I chang 'each'를'map'에 추가하고'join'을 추가합니다; 너도 그걸 바꿨 니? 그렇지 않으면 무엇이 보이나요? (나는 1.9.3을 사용하고 있고 그것은 나를 위해 일한다). – matt

+0

아, 나는 '각'에서 '지도'로의 변경을 놓쳤습니다. 그 점을 지적 해 주셔서 감사합니다. – bevanb

0

자바 스크립트에 루비 구문이 있는데 분명히 작동하지 않습니다. underscore.js와 같은 라이브러리를 사용하여 다음과 같이 배열을 반복 할 수 있습니다.

_.each([1, 2, 3], function(number){ 
    $("#form_" + number).my_method(); 
}); 

시도해보십시오.

또는 당신은 jQuery의 각 사용할 수 있습니다

$.each([1, 2, 3], function(i, number){ 
    $("#form_" + number).my_method(); 
}); 
+0

을 것

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

관련 문제