2013-05-20 183 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存放名爲job我轉換爲JSON Ruby對象。我想將該JSON對象轉換回Ruby對象並使用它的屬性來構造一個Javascript字符串。我知道在這個例子中我可以簡單地使用data["id"],但這只是示例代碼,我需要更多更復雜的Ruby東西來進入該字符串。

當我嘗試啓動服務器,並加載一個網頁,我收到此錯誤:

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通過文本和執行操作,或者基於Ruby代碼寫出文字它看到裏面某些轉義序列。您有僱員再培訓局會處理兩個轉義序列:

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

數據沒有ERB /紅寶石範圍,這就是爲什麼你看到的上面的錯誤被定義。看起來你可能會得到與JavaScript代碼混合在一起的ERB/ruby​​代碼。他們互相獨立運作。

+0

這是否意味着命名你的文件something.js.erb不一定允許你訪問你的js文件中的控制器變量? – ahnbizcad

+0

不,我只是想說,你必須獨立思考ERB傳遞和由此產生的JavaScript。再培訓局正在操作紅寶石土地上的文字,而所產生的JavaScript將與ERB操作產生的任何文本一起工作。我認爲這個問題的錯誤是認爲數據變量是在紅寶石/ ERB土地上定義的,當它沒有時「T。 – Puhlze