2012-08-03 39 views
0

我具有限定一個實例變量的控制器#動作:軌道/使用Javascript:未捕獲的ReferenceError當傳遞實例變量的CoffeeScript

@min_rating = 4 

在視圖我有以下:

<%= javascript_tag do %> 
    min_rating = <%= @min_rating %> 
<% end %> 

然後在我的Coffeescript我可以做到以下幾點:

jQuery -> 
    alert min_rating 

如果我在該視圖的頁面上,它工程pro佩爾利。

但是,如果我在另一種觀點認爲,我得到一個JS錯誤,指出了var MIN_RATING沒有定義:

Uncaught ReferenceError: min_rating is not defined 

這是因爲我加載所有的JS應用程序中的所有視圖。 JS:

//= require_tree . 

所以,我的問題是:什麼是處理這個Rails中的最佳方式?

+0

有人建議我使用「// = require_self」,或者你可以刪除整個語句// = require_tree。給它一個嘗試和更新請 – user1455116 2012-08-03 23:57:06

+0

你可能想看這個http://house9.blogspot.com/2011/05/rails-31-javascript-execution.html-不同的選項來執行JavaScript的軌道管道管道/咖啡腳本 – house9 2012-08-04 05:14:25

回答

0

這取決於你的目標。一個簡單的方法是檢查在javascript MIN_RATING是否定義引用它之前:

jQuery -> 
    if typeof min_rating != 'undefined' 
    alert min_rating 

或者你可以確保MIN_RATING定義每一頁上 - 可能由javascript_tag呼叫轉移到一個裝飾,並回落到默認值。無論您的應用程序是否合理,都取決於您。

或者您可以嘗試避免在不需要的頁面上加載在min_rating上引用的腳本。但是這意味着你無法在每個頁面上使用相同的組合JavaScript文件。

1

由於咖啡腳本沒有var語句,它會自動將其插入咖啡腳本中的所有變量,這樣可以防止編譯的JavaScript版本將所有內容泄漏到全局名稱空間中。

因此,由於沒有辦法讓事件有意地從事物的咖啡腳本一側「泄漏」到全局名稱空間中,所以您需要將全局變量定義爲全局對象的屬性。在你的CoffeeScript

attach them as properties on window 

<%= javascript_tag do %> 
    window.min_rating = <%= @min_rating %> 
<% end %> 

,然後訪問MIN_RATING。

相關問題