我是.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'
答案 0 :(得分:1)
ERB传递文本并根据在某些转义序列中看到的ruby代码执行操作或写出文本。您有两个ERB将处理的转义序列:
<% job = JSON.parse(data) %>
var new_job = "HELLO <%= job.id %>";
数据未在ERB / ruby范围内定义,这就是您看到上述错误的原因。看来你可能正在使用javascript代码混淆ERB / ruby代码。它们彼此独立运作。