2014-01-28 165 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