Fullcalendar - 点击上一个和下一个按钮时会进行多次通话

时间:2014-11-10 12:48:47

标签: jquery fullcalendar

当点击nextor上一个按钮时,它会进行多次通话。很多时候,我点击这些按钮时会产生很多时间。以下是代码

    var sourceFullView = "@Url.Action("GetDiaryEvents","LeaveCalender")";
    var sourceSummaryView="@Url.Action("GetDiarySummary","LeaveCalender")";
    var CalLoading = true;$('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,basicWeek,basicDay'
        },
        defaultView: 'month',
        events:"@Url.Action("GetDiaryEvents","LeaveCalender")",

        viewRender: function (view, element) {

            if (!CalLoading) {
                if (view.name == 'month') {
                    $('#calendar').fullCalendar('removeEvents');

                    $('#calendar').fullCalendar('removeEventSource', sourceFullView);
                    $('#calendar').fullCalendar('addEventSource', sourceSummaryView);
                }
                else {
                    $('#calendar').fullCalendar('removeEvents');
                    $('#calendar').fullCalendar('removeEventSource', sourceSummaryView);

                    $('#calendar').fullCalendar('addEventSource', sourceFullView);
                }
            }
        }

    });

    CalLoading = false;


});

请有人帮我找到解决方案

4 个答案:

答案 0 :(得分:0)

来自documentation,关于viewRender:

  

当用户更改视图时,将触发此回调,或   当调用任何日期导航方法时。

因此,您要删除并添加视图的每次更改中的所有事件,包括单击上一个/下一个按钮。

通常,当您初始化日历时,您的资源只会在开头添加一次。

$('#calendar').fullCalendar({
     eventSources: [
        sourceFullView,
        sourceSummaryView
    ]
 });

答案 1 :(得分:0)

我通过以下解决方案解决了这个问题。我使用的是FullCalendar v2.1.1。在lib中存在一个错误,源没有被清除,它在每次点击时都会不断增长,因为它会进行多次调用。作为解决方案,使用以下代码替换removeEventSource(source)

function removeEventSource(source) {
sources = $.grep(sources, function(src) {
    return !isSourcesEqual(src, source);
});
// remove all client events from that source
sources = [];  // this is a bug fix , clear source
cache = $.grep(cache, function(e) {
    return !isSourcesEqual(e.source, source);
});
reportEvents(cache);

}

答案 2 :(得分:0)

viewRender: function (view, element) {
                alert(CalLoading);
                if (!CalLoading) {

                    if (view.name == "month") {
                        $('#calendar').fullCalendar('removeEventSource', sourceFullView);
                        $('#calendar').fullCalendar('removeEvents');
                        $('#calendar').fullCalendar('addEventSource', sourceSummaryView);
                    }
                    else {
                        $('#calendar').fullCalendar('removeEventSource', sourceSummaryView);
                        $('#calendar').fullCalendar('removeEvents');
                        $('#calendar').fullCalendar('addEventSource', sourceFullView);
                    }
                    CalLoading = true;  // <<<<--- Cambialo Así ;)
                }
            }

答案 3 :(得分:0)

您需要删除all event sources

removeEventSource替换为removeEventSources,将sourceFullView替换为null

 $('#calendar').fullCalendar('removeEventSource', sourceFullView);

替换上面的行
$('#calendar').fullCalendar('removeEventSources', null);