簡體   English   中英

Rails / Javascript:將實例變量傳遞給Coffeescript時出現Uncaught ReferenceError

[英]Rails/Javascript: Uncaught ReferenceError when passing instance variable to Coffeescript

我有一個定義實例變量的controller#action:

@min_rating = 4

在視圖中,我有以下內容:

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

然后,在我的Coffeescript中,我可以執行以下操作:

jQuery ->
  alert min_rating

如果我在該視圖的頁面上,它將正常工作。

但是,如果我在另一個視圖上,則會收到JS錯誤,提示未定義var min_rating:

Uncaught ReferenceError: min_rating is not defined 

這是因為我為application.js中的所有視圖加載了所有JS:

//= require_tree .

因此,我的問題是:在Rails中解決此問題的最佳方法是什么?

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

因此,由於沒有辦法故意從咖啡腳本方面使某些內容“泄漏”到全局名稱空間中,因此您需要將全局變量定義為全局對象的屬性。

attach them as properties on window

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

然后在您的coffeescript中訪問min_rating。

這取決於您的目標。 一個簡單的選擇是在引用min_rating之前檢查是否在javascript中定義了它:

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

或者,您可以確保在每個頁面上都定義了min_rating-可以通過將javascript_tag調用移至裝飾器並回退為默認值來進行定義。 這是否適合您的應用程序取決於您。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM