【问题标题】:.JS.ERB can't recognize variables.JS.ERB 无法识别变量
【发布时间】:2013-05-15 13:38:34
【问题描述】:

我是 .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 内容才能进入该字符串。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是否意味着将文件命名为 something.js.erb 不一定允许您访问 js 文件中的控制器变量?
    • 不,我只是想说您必须独立考虑 ERB 通行证和生成的 javascript。 ERB 正在处理 ruby​​ 领域中的文本,而生成的 javascript 将适用于 ERB 操作导致的任何文本。我认为问题中的错误是由于认为数据变量是在 ruby​​ / ERB 领域中定义的,当时它是't。
    猜你喜欢
    • 2021-02-27
    • 2014-06-10
    • 2017-01-04
    • 2013-08-13
    • 2018-11-12
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多