2013-05-20 2 views
0

.js.erb 파일에 익숙하지 않습니다. Ruby 변수가 필요한 Javascript 문자열을 생성해야하기 때문에이를 사용하고 있습니다..JS.ERB에서 변수를 인식 할 수 없습니다.

여기 내 코드입니다.

pusher.js.erb

var pusher = new Pusher(PUSHER KEY); 
var myChannel = pusher.subscribe('job_channel'); 
$(document).ready(function() { 
    myChannel.bind('job_added', function(data) { 
     addJob(data) 
    }); 

    function addJob(data) { 
     <% job = JSON.parse(data) %> 
     var new_job = "HELLO <%= job.id %>"; 
     $('.job_list').append(new_job) 
    }; 

}); 

data 내가 JSON 변환 job라는 루비 객체를 보유하고 있습니다. JSON 객체를 다시 Ruby 객체로 변환하고 그 속성을 사용하여 자바 스크립트 문자열을 생성하려고합니다. 이 예제에서는 단순히 data["id"]을 사용할 수 있지만이 코드는 샘플 코드 일 뿐이므로 복잡한 루비가 필요합니다.

undefined local variable or method `data' for #<#:0x007ffe07cb7e58> (in /PATH/javascripts/pusher.js.erb)

app/assets/javascripts/pusher.js.erb:17:in `block in singletonclass' 
app/assets/javascripts/pusher.js.erb:65530:in `instance_eval' 
app/assets/javascripts/pusher.js.erb:65530:in `singletonclass' 
app/assets/javascripts/pusher.js.erb:65528:in `__tilt_70364478302900' 
app/views/layouts/application.html.erb:21:in `_app_views_layouts_application_html_erb___1231815935649534974_70364476328360' 

답변

1
가 ERB 텍스트를 통과하여 작업을 수행 또는 루비 코드를 기반으로 텍스트를 기록

는 내부보고 : 나는 페이지를 서버를 시작하고로드하려고 할 때

,이 오류를 얻고있다 특정 이스케이프 시퀀스.

<% job = JSON.parse(data) %> 
var new_job = "HELLO <%= job.id %>"; 

데이터가 위의 오류가 표시되는 이유는 ERB/​​루비 범위에 정의되지 않는 : 당신은 ERB가 처리 할 두 이스케이프 시퀀스가 ​​있습니다. ERB/​​루비 코드가 자바 스크립트 코드와 섞여있을 수 있습니다. 그들은 서로 독립적으로 작동합니다.

+0

이렇게하면 something.js.erb 파일의 이름을 지정해도 js 파일의 컨트롤러 변수에 액세스 할 수있는 것은 아닙니다. – ahnbizcad

+0

아니요, 저는 ERB 패스와 결과 자바 스크립트를 독립적으로 생각해야한다고 말하려고했습니다. ERB는 루비 랜드에서 텍스트를 조작하는 반면, 결과 자바 스크립트는 ERB 조작이 발생한 텍스트와 함께 작동합니다. 문제의 오류는 데이터 변수가 루비/ERB 토지에 정의되어 있다고 생각한 결과였습니다. '티. – Puhlze