Jquery qtip“不是函数” - Ruby on Rails

时间:2015-05-08 15:27:49

标签: jquery ruby-on-rails fullcalendar qtip2

我正在尝试使用rails FullCalendar来使用qtip,但是在设置qtip时无法通过错误“不是函数”。我刚刚回到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,这也无效。

有人看到任何明显的错误吗?

1 个答案:

答案 0 :(得分:1)

结束了我自己解决这个问题,所以想要为有同样问题的人发布答案。事实证明,我必须下载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
        },
    });
});