我有这样的场景:
日历最初加载并显示基于多个事件源的一堆事件。我还设置了一些下拉框,让用户可以根据某些标准筛选日历。但是为了确保始终处理从事件源加载的初始事件集,我在开始过滤之前调用. fullcalendar ('refetchEvents')调用。我通过获取客户端事件(. fullcalendar (' clienttevents '))来做到这一点。但问题是,当我得到客户端事件后,我做一个refreshEvents,我得到0客户端事件,即使我可以看到一堆事件在那个时间点的日历上。我错过什么了吗?请建议。
代码片段:
$('#calendar').fullCalendar('refetchEvents'); //commenting this out, gives me the clientEvents
var calEvents = $('#calendar').fullCalendar('clientEvents');
alert(calEvents.length + " and " + $.isArray(calEvents)); //get nothing here after refetchEvents
if (ui.checked) {
$.ajax({
type: "GET",
async: true,
url: "/Case/CalendarFilterCriteria",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { filterOptions: data, caseId: cavo.currentCaseId },
success: function (response) {
//alert($.isArray(response.eventIds));
$.each(calEvents, function (index, value) {
//alert(index + " and " + value.id);
$('#calendar').fullCalendar('removeEvents', function (value) {
var found = 0;
$.each(response.eventIds, function (index, val) {
console.log("value " + value.id + " val " + val.id);
if (value.id === val.id) {
console.log("match found");
found = 1;
return false; //to break the inner .each loop
}
})
console.log("remove " + !found);
return !found; //if true, the event will be deleted from the calendar
})
});
}
您的问题是refetchEvents
正在异步地进行ajax调用。这意味着当您调用$('#calendar').fullCalendar('clientEvents')
时,不一定会检索到数据。