通过coffeescript访问实例变量

时间:2014-01-28 06:34:36

标签: javascript ruby-on-rails ruby coffeescript

我正在尝试通过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应该被定义,因为我在页面加载时使用它。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的CoffeeScript和您的网页很可能在不同的视图中。因此,在渲染页面时,@project可用时,在渲染JavaScript时无法提供可用性。转移它的最简单方法是在页面视图中定义JavaScript变量。例如,如果您使用的是Haml或Slim:

coffeescript:
  window.MyModule.project_id = #{ @project.id }

然后将代码更改为

additional_data: { project_id: window.MyModule.project_id, ... }