2013-04-11 51 views
3

我很抱歉,如果這已經發布到別的地方,但我不確定如何甚至短語搜索這個問題。javascript函數可通過javascript_include_tag獲得,但不是資產管道和application.js

基本上,我有fullcalendar.js坐在app/assets/javascripts/。在我的application.js文件(當然在同一文件夾中),我有以下...

//= require jquery 
//= require jquery_ujs 
//= require foundation 
//= require_tree . 

因此,如預期的那樣fullcalender.js獲取資產編譯過程中風靡起來,並在application.js即結束然後送達用戶。

的問題出現時,我嘗試引用fullcalendar.js定義(因此在application.js規定編制資產後)的功能,它拋出一個錯誤在Firebug的JS控制檯說明TypeError: $(...).fullCalendar is not a function,當然完整的日曆不渲染。

但是,現在,如果在所有其他腳本和樣式表都被拉入後,我將<%= javascript_include_tag "fullcalendar.js" %>包含在佈局文件中,它將按預期工作。

擋板,我看着每個文件中的js,並比較它們,看不出有什麼區別。資產管道是否有某些我不知道的東西,或者這是一個怪異的DOM問題?在這一點上我不知道。

作爲參考,這裏是application.jsfullcalendar.js的內容鏈接到網站的頁面源。我只包括每個相關的完整日曆部分,因爲如果包含所有內容,它對於要點或pastebin來說太大了。

讓我感到困惑的是,這兩個來源都來自同一個文件,一個只是直接鏈接,另一個來自資產管道流程。

application.js - http://pastebin.com/byyNErB8

fullcalendar.js - http://pastebin.com/k4p29YmP

任何見解或幫助將不勝感激。

回答

3

也許是依賴性錯誤。我會建議你對這樣的lib使用更好的做法。

  1. 把fullcalendar腳本轉換爲vendor/assets/javascripts

  2. 樹前和jQuery後需要手動該腳本中的application.js和任何其他LIB它依賴。

    /=require 'fullcalendar` 
    

添加

檢查頭加載JavaScript文件,如果application.js中是最後一個,你有相關性錯誤。在調用它之前,lib必須在那裏。

+0

是的,所以,我確實在我的'vendor/assets/javascripts'部分有它,但刪除了任何進一步移動的部分,我暫時將它移到'app/assets/javascripts'部分。我得到相同的結果我是否留在供應商或應用部分:( 文件,但是,要清楚,你是完全正確的,因爲它們最好放在供應商的文件夾中。 – jamesconant 2013-04-11 03:51:26

+0

@detectivist,我覺得問題是你調用腳本之前加載庫。您可以嘗試刪除'需要tree'和手動要求每一個文件,把自己的腳本在最後。 – 2013-04-11 03:54:24

+0

比方說,我有一個小腳本,它引用在定義的函數該庫。不要我需要有一個LIB加載我的腳本試圖調用該函數呢?現在,我自己的腳本,調用到LIB本身加載的lib後加載之前,我想這是你的意思。 – jamesconant 2013-04-11 03:57:59