是的,這可能會打破你的其他代碼。當您在生產環境中運行rails時,如果您使用sprokets並將所有內容都放入application.js中,那麼它將全部處理爲單個文件。如果在該文件中的任何一點JavaScript代碼失敗,它將打破文件的其餘部分(這是非常討厭)
你可以有條件地包括拉斐爾圖書館,我認爲你已經這樣做的錯誤,但在你的JavaScript代碼中,你也可以檢查它是否被定義。我會做的就是圍繞這使得拉斐爾使用的代碼,把這樣的:
if (typeof Raphael !== "undefined") {
... Raphael code goes here...
}
這樣,如果沒有加載庫,它並不重要,你的代碼不會打破,如果它被加載,那麼你的拉斐爾特定的代碼將運行正常:)
更多信息
我拉斐爾庫移動到供應商目錄中。它更有意義,因爲這是專門針對您自己未添加/創建的資產。
Rails現在自動加載Raphael的原因很可能是由於application.js
的默認配置。默認情況下,軌道設置這個了
//= require_tree .
這將包括資產目錄這是好的內的所有JS文件,但如果你想有條件包括文件這是一個稍微尷尬。
如果你希望它是基於每個頁面的條件,你可以改變你的application.html佈局來添加一個新的JS包含,它將包含raphael庫,只有當它被告知(通過變量或其他一些機制)
如果您添加類似:
<%= javascript_include_tag("raphael") if @raphael %>
顯然改變拉斐爾對什麼庫文件的名稱實際上是,那麼將只有當@raphael變量是真有。這可以在任何地方設置,無論是在控制器中,還是在視圖的頂部,甚至可以在視圖中調用的視圖助手中設置。完全取決於你
謝謝。我沒有在常規頁面上調用代碼,但我會檢查我正在使用的庫是否開始自行處理。 – 2013-05-05 20:56:18
有沒有簡單的方法來防止Rails在不需要時自行加載資源? – 2013-05-05 20:56:54
嗯,當你在Chrome中遇到錯誤時,它應該在JS中給你一條錯誤來自的線。 檢查你的application.js文件裏面。現在(至少默認)你可能有類似// = require_tree的東西。 如果你這樣做,那麼它會自動在assets目錄中包含EVERY JS文件。我建議將raphael庫移動到'/ vendor/assets/javascripts'中,因爲它無論如何都是外部庫。然後,您可以將其包含在有條件的任何頁面中。因此,在application.html中,您可以使用類似於 'javascript_include_tag(「raphael」)if @ raphael' – PaReeOhNos 2013-05-05 20:59:50