2011-09-22 3 views
0

Jist :

<script type="text/javascript"> Ruby에서 Javascript로 정적 (Rails가 클라이언트에 페이지를 전달한 후 변경되지 않음) 문자열에 액세스하려고합니다.레일 3 : Ruby에서 Javascript로 문자열을 전달 하시겠습니까?

더 상세 (일명 :. 내가하고 싶은 이유)

나는 저거 너트라는 푸시 서버를 사용하고 컨트롤러의 변수에 의해 결정 적절한 "채널"에 연결할 수 있습니다. 저거넛 서버에 "듣기"에 대한 저거넛의 구문은 다음과 같습니다

j.subscribe("channel", function(data) { }) 

내가이 원하는 :.

j.subscribe(<%= @myChannel %>, function(data) { }) 
+1

아이디어가 좋습니다. 귀하의 질문은 무엇인가? 어떻게 작동하지 않습니까? –

+0

경고를 시도하면 (<% = @myChannel %>) 해당 라인 이후의 모든 것이 작동하지 않으며 경고가 실행되지 않습니다. 또한 juggernaut의 매개 변수로 Ruby 코드를 넣으면 juggernaut subscribe 함수가 실행되지 않습니다. – Derek

답변

3

대부분의 가능성이 @myChannel"을 포함하지 않는

당신 사용해야합니다 :

j.subscribe("<%= @myChannel %>", function(data) { }) 
+0

아, 완벽 해요! 간단한 초보자 실수! – Derek

2

diffe rent 아이디어는 .js 파일에 루비 코드를 삽입하는 것이 아니라 뷰 자체에 루비 코드를 포함시키는 것입니다.

보기에서 자바 스크립트 변수 channel을 설정하거나 일부 html 요소의 속성으로 "채널"을 추가하십시오 (둘 중 더 자연스러운 경우). 그런 다음 애플리케이션 자바 스크립트에서 문서가 준비되면 해당 변수에 액세스 할 수 있습니다.

채널을 변경하면 클라이언트가 자바 스크립트를 다시 다운로드 할 필요가 없지만 캐시에서 계속 사용하고 레일스가 매번 .js를 렌더링 할 필요가 없다는 측면 장점이 있습니다. .

+0

큰 제안. 절대로 그렇게 생각하지 않았습니다. 감사! – Derek

+0

+1, 정적 js 파일은 대부분 시간이 더 좋습니다 :) – PeterWong

+0

+1 예, 이것이 최선의 방법입니다. 또한 도구 체인을 사용하여 js 파일을 올바르게 처리 할 수 ​​있습니다. 최소화 및 다른 js와 연결하여 html 페이지 당 하나의 js 만 다운로드합니다. 세 번째 옵션은 html 페이지가 start js 메서드를 호출하여 명시 적으로 js 작업을 시작하도록하는 것입니다. 그런 다음 채널을 호출 매개 변수로 전달하십시오. –