0

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

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

#<#:0x007ffe07cb7e58> 的未定义局部变量或方法“数据”(在 /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'
4

1 回答 1

1

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

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

数据未在 ERB / ruby​​ 范围内定义,这就是您看到上述错误的原因。看来您可能会将 ERB / ruby​​ 代码与 javascript 代码混合在一起。它们彼此独立运行。

于 2013-05-20T22:08:14.077 回答