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

时间:2013-04-11 03:25:05

标签: javascript ruby-on-rails fullcalendar asset-pipeline

我很抱歉,如果这张贴在其他地方,但我不确定如何对这个问题进行搜索。

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

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

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

当我尝试引用fullcalendar.js中定义的函数(并在编译资产后在application.js中定义)时出现问题,它会在js控制台中引发错误,指出TypeError: $(...).fullCalendar is not a function萤火虫,当然还有完整的日历无法呈现。

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

可能是依赖错误。我建议你为这样的lib使用更好的练习。

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

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

    /=require 'fullcalendar`
    
  3. 添加

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