2010-11-28 4 views
1

아주 간단한 ROR (레일 2.3.5) 응용 프로그램을 만들고 jQuery 플러그인 jRails를 사용하고 있습니다. jQuery youtube 플레이어에서 점심을 수정하여 ror의 컨트롤러 목록에있는 임의의 비디오를 재생합니다.Rails 변수를 jQuery 함수로 전송하는 방법은 무엇입니까?

controller.rb

<div id="random"> 
<%[email protected]%> 
</div> 

여기 링크 예를 들어 그냥 무작위 유튜브 링크입니다

def show 
    @clip = Video.find(:all, :select =>'link', :order => 'RANDOM()', :limit => 1).map(&:link) 
    respond_to do |format| 
     format.html 
    end 
    end 

show.html.erb. 절름발이 질문은이 jQuery 함수에서이 변수를 얻는 방법입니다.

어떤 도움에 매우 감사 할 것인가

를 application.js. 변수가이 같은 URL이 포함되어 있다고 가정

+0

렌더링 된 출력은 어떻게 생깁니 까? –

답변

4

은 레일 코드를두고 jQuery를 사용에서 :

<div id="random"> 
<%=link_to h(@clip), h(@clip) %> 
</div> 

후 JS :

$(document).ready(function(){ 
    $('#player').youTubeEmbed($('#random a').attr('href')); 
    $('#random').hide(); 
}); 
향상된 접근성

$(document).ready(function(){ 
    $('#player').youTubeEmbed($('#random').text()) 
}); 

나는 ERB에 변경 것

+0

야 쿠브, 고마워요! 귀하의 솔루션이 도움이되었습니다. 이제 나는 내 자신의 교육을 quetly 계속할 수있다. – Maay

2

: (죄송합니다, 자바 스크립트가 HTML과 같은 파일에없는 있다는 사실 놓친

$(document).ready(function(){ $('#player').youTubeEmbed("<%=escape_javascript(@clip)%>"); }); 

-뿐만 아니라이 shouldn을 ' 그렇다면!)

변수에 URL이 포함되어 있다고 가정하고 URL을 표시하지 않으려면 페이지 변수에 다음과 같이 포함 시키십시오 (show.html.erb의 div 코드를 다음으로 대체하십시오).) :

(매우 거의 같은 일 또는
<script type='text/javascript'> 
var myStuff = { 
    clipUrl: "<%=escape_javascript(@clip)%>" 
}; 
</script> 

...)
<script type='text/javascript'> 
window.myStuff = { 
    clipUrl: "<%=escape_javascript(@clip)%>" 
}; 
</script> 

....

... 그리고 다음과 같이 사용할 수는 :

$(document).ready(function(){ 
    $('#player').youTubeEmbed(window.myStuff.clipUrl); 
}); 

이런 식으로 변수의 값을 출력, 당신은 무엇을하는 것은 기입 유효한 자바 스크립트를 될 수있을 테니까요됩니다 확인해야합니다. 예를 들어 @clip 변수에 " 또는 \이 포함되어있는 경우 을 \"으로 설정하고 외딴 백 슬래시를 \\으로 설정해야합니다. Jakub Hampl은 이에 대한 escape_javascript 함수를 유용하게 지적했으며,이 코드 예제를 편집했습니다.

이렇게하면 window에 새 기호가 추가됩니다. 나는 우리의 새로운 심볼을 오브제로 만들었습니다. 그래서 다른 것들과 함께해야한다면, 같은 오브제에 그들을 포함시킬 수 있습니다. 그래서 많은 심볼을 생성하지 않게됩니다. (글로벌 심볼을 많이 만듭니다.   —입니다. 따라서 window 속성   —은 유지 관리 문제가되는 경향이 있습니다.그래서 예를 들어, 당신이 클립이 있다면 : 오프 주제

<script type='text/javascript'> 
window.myStuff = { 
    someNiftyClip:  "<%=escape_javascript(@clip)%>", 
    someOtherNiftyClip: "<%=escape_javascript(@anotherClip)%>" 
}; 
</script> 

: youTubeEmbed를 호출 라인에서을, 내가 마지막에 세미콜론을 추가 있습니다. JavaScript의 semicolon insertion에 의존하지 않는 것이 가장 좋습니다.

+1

이 aproach에'escape_javascript'를 사용하십시오. '@ clip'은'http://youtu.be/"alert('evil code here ')와 같을 수 있습니다; –

+0

@ Jakub : 고마워요. 나는 탈출의 중요성을 언급했지만, 나는 실제 기능을 알지 못해 많은 Railshead가 아니다. 이제 OP에서 편집하고 링크했습니다. 다시 한 번 감사드립니다! –

+0

귀하의 선택 사항도 효과가 있었으며 많은 감사드립니다. 그런 커뮤니티를 찾는 것은 대단한 일입니다. 감사합니다. – Maay

0

변수를 숨겨진 필드에 넣으면 $ ('# hiddenFieldID')와 같은 함수에서 사용할 수 있습니다. 그대로

관련 문제