.JS.ERB无法识别变量

时间:2013-05-20 21:48:54

标签: javascript ruby ruby-on-rails-3 pusher

我是.js.erb文件的新手,我正在使用它们,因为我需要构建一个需要Ruby变量的Javascript字符串。

这是我的代码。

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的Ruby对象,我将其转换为JSON。我想将该JSON对象转换回Ruby对象并使用其属性构造Javascript字符串。我知道在这个例子中我只能使用data["id"],但这只是示例代码,我需要更复杂的Ruby内容来进入该字符串。

当我尝试启动服务器并加载页面时,我收到此错误:

  

#&lt;#:0x007ffe07cb7e58&gt;的未定义局部变量或方法`data'         (在/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 个答案:

答案 0 :(得分:1)

ERB传递文本并根据在某些转义序列中看到的ruby代码执行操作或写出文本。您有两个ERB将处理的转义序列:

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

数据未在ERB / ruby​​范围内定义,这就是您看到上述错误的原因。看来你可能正在使用javascript代码混淆ERB / ruby​​代码。它们彼此独立运作。