2014-01-28 166 views
0

我试图通过coffeescript文件访问一些ruby实例变量。实例变量在什么时候被定义?例如,当我尝试以下方法:通过coffeescript访问实例变量

$(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

您的CoffeeScript和您的页面很可能在不同的视图。因此,在呈现页面时可以使用@project,但在渲染JavaScript时没有提及其可用性。最简单的方法是在页面视图中定义一个JavaScript变量。举例来说,如果你使用Haml的或修身:

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

,然后改变你的代码

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

谢谢你的建议。如果我的页面通过部分加载,我将如何定义project_id变量?会不会像? – scientiffic

+0

如果它是部分或者不是很重要,但是你使用的是什么引擎。如果你使用ERb(看起来),那么是的。鉴于您使用的是常规JavaScript而不是CoffeeScript,分号应该是可取的(尽管不必要),因为它是很好的JS风格。 – Amadan

+0

谢谢,这对我有用! – scientiffic