当点击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;
});
请有人帮我找到解决方案
答案 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);