Jquery qtip "is not a function" - Ruby Rails

Jquery qtip "is not a function" - Ruby on Rails

我正在尝试让 qtip 与 rails FullCalendar 一起工作,但在设置 qtip 时无法克服错误 "is not a function"。我刚回到 Jquery/Rails,显然这通常是一个 js 文件加载问题。但是,似乎 js 文件正在正确加载(以正确的顺序并且只有一次)。这是(一些)我的 js 文件:

<script src="/assets/jquery.self-d03a5518f45df77341bdbe6201ba3bfa547ebba8ed64f0ea56bfa5f96ea7c074.js?body=1" data-turbolinks-track="true"></script>
<script src="/assets/jquery_ujs.self-8e98a7a072a6cee1372d19fff9ff3e6aa1e39a37d89d6f06861637d061113ee7.js?body=1" data-turbolinks-track="true"></script>
<script src="/assets/jquery.qtip.self-c86ab2c0151d0748df498fc4603ec759f565e7966405872bad084728da15c92c.js?body=1" data-turbolinks-track="true"></script>

在我看来,js 文件正在正确加载。我暂时将日历放在 application.js 中:

//= require jquery
//= require jquery_ujs
//= require jquery.qtip.js

$(document).ready(function(){
    $("#calendar").fullCalendar({
        eventSources : [{
            url: 'url_to_get_data'
        }],
        eventLimit: true,
        eventRender: function(event, element) {
            element.qtip({
                content: event.description
            });
        }
     });
});

我直接从 FullCalendar's eventRendering section 中提取了这个 eventRender 示例。即使我尝试在 input.

上放置一个 qtip,这也不会起作用

有人看出明显的错误吗?

最后我自己解决了这个问题,所以想 post 为遇到相同问题的任何人提供答案。事实证明,我必须下载 The Qtip .js file 并将其放在 assets/javascripts 中,并且仍然将其包含在 application.js 文件中。我想我错误地认为 rails 会为我做这件事。

不确定这是否重要,但我的 require 语句的顺序如下所示:

//= require jquery2
//= require jquery_ujs
//= require moment
//= require fullcalendar
//= require jquery.qtip.js

最后一件事 - 我确实必须修改 original example 中的代码。这是我修改后的代码,检查空值:

$(document).ready(function(){
    $("#calendar").fullCalendar({
        eventSources : [{
            url: 'url_to_get_data'
        }],
        eventLimit: true,
        eventRender: function(event, element) {
            if (element && event.description) {
            element.qtip({
                content: event.description,
                hide: {
                    fixed: true,
                    delay: 500
                }
            });
        }
        },
        eventClick: function(calEvent, jsEvent, view) {
            // Open in new window
            url = window.location.href;
            window.open(url + "/" + calEvent.id);
        },
        eventMouseover: function(event, jsEvent, view) {
            // Todo
        },
        eventMouseout: function(event, jsEvent, view) {
            // Todo
        },
    });
});