javascript函数可通过javascript_include_tag获得,但不是资产管道和application.js

我很抱歉,如果这已经张贴在其他地方,但我不确定如何甚至短语搜索这个问题。

基本上,我在app/assets/javascripts/fullcalendar.js 。 在我的application.js文件中(当然在同一个文件夹中)我有以下内容……

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

因此,正如预期的那样, fullcalender.js会在资产编译过程中被fullcalender.js ,最终会在application.js中被提供给用户。

当我尝试引用fullcalendar.js定义的函数(因此在编译资产后在application.js定义)时会出现问题,它会抛出一个错误,说明TypeError: $(...).fullCalendar is not a function萤火虫的控制台,当然完整的日历不会呈现。

但是,现在,如果在拉入所有其他脚本和样式表之后在布局文件中包含 ,它将按预期工作。

令人困惑的是,我查看了每个文件中的js并对它们进行了比较,看不出有什么区别。 资产管道是否有一些我不知道的事情,或者这是一个怪异的DOM问题? 我现在还不知道。

作为参考,以下是在站点的页面源中链接的application.jsfullcalendar.js的内容。 我只包括每个的相关完整日历部分,因为如果我包含所有内容,它对于gist或pastebin来说太大了。

令我感到困惑的是,两个来源都来自同一个文件,一个直接链接到另一个文件,另一个来自资产管道流程。

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

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

任何见解或帮助都将非常感激。

也许是一个依赖错误。 我建议你对这种lib使用更好的练习。

  1. 将fullcalendar脚本放入vendor/assets/javascripts

  2. 在树之前和jquery之后以及它依赖的任何其他lib之后,在application.js中手动需要此脚本。

     /=require 'fullcalendar` 

检查标头中加载的Javascript文件,如果application.js是最后一个,则表示存在依赖性错误。 在调用它之前,lib必须在那里。