我正在尝试通过coffeescript文件访问一些ruby实例变量。实例变量在什么时候被定义?例如,当我尝试以下操作时:
$(window).load () ->
$('#s3-uploader').S3Uploader
additional_data: {project_id: <%= @project.id %>, step_id: <%= @step.id %>, user_id: <%= current_user.id %>}
我收到错误
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
(in /images.js.coffee.erb)
我知道@project应该被定义,因为我在页面加载时使用它。我做错了什么?
答案 0 :(得分:1)
您的CoffeeScript和您的网页很可能在不同的视图中。因此,在渲染页面时,@project
可用时,在渲染JavaScript时无法提供可用性。转移它的最简单方法是在页面视图中定义JavaScript变量。例如,如果您使用的是Haml或Slim:
coffeescript:
window.MyModule.project_id = #{ @project.id }
然后将代码更改为
additional_data: { project_id: window.MyModule.project_id, ... }