Javascript 当必须从空数据重新绘制时,FullCalendar为空
我已经试着调试这个问题好几天了,但还没有取得任何进展 我正在使用最新的小提琴演示FullCalendar 我的数据集如下所示Javascript 当必须从空数据重新绘制时,FullCalendar为空,javascript,jquery,fullcalendar,Javascript,Jquery,Fullcalendar,我已经试着调试这个问题好几天了,但还没有取得任何进展 我正在使用最新的小提琴演示FullCalendar 我的数据集如下所示 var myDataset = { "classes": [ [{ "name": "ECEC 301 Advanced Programming for Engineers Lecture", "days": "MWF", "times": "02:00 pm - 03:20
var myDataset = {
"classes": [
[{
"name": "ECEC 301 Advanced Programming for Engineers Lecture",
"days": "MWF",
"times": "02:00 pm - 03:20 pm",
"crn": "11215"
}, {
"name": "ECEC 301 Advanced Programming for Engineers Lab",
"days": "W",
"times": "09:00 am - 10:50 am",
"crn": "11216"
}],
[{
"name": "ECEC 301 Advanced Programming for Engineers Lecture",
"days": "MWF",
"times": "02:00 pm - 03:20 pm",
"crn": "11215"
}, {
"name": "ECEC 301 Advanced Programming for Engineers Lab",
"days": "F",
"times": "02:00 pm - 03:50 pm",
"crn": "11217"
},
{
"name": "SOC 101 Introduction to Sociology Lecture",
"days": "TBD",
"times": "",
"crn": "11044",
"campus": "Online",
"enrollment": "CLOSED",
"short_name": "SOC 101 Lecture"
}
]
]
};
在真实代码中,myDataset
对象通过AJAX调用动态更新
数据是通过我编写的API更新的,该API提供了结果过滤,因此用户可以设置参数来更新日历视图(这会更改myDataset
)
我遇到的一个问题是,当我设置一个过滤器,使myDataset
为空,然后取消过滤所有内容,使myDataset
再次具有数据时,我的完整日历视图将为空,即使其中有数据,并且事件正在被推送(我已检查)
问题似乎源于removeEvents
方法,该方法在每次日历需要呈现新事件时调用,以替换旧事件:
// Clear all events to prepare for the next set of events.
$('#calendar').fullCalendar('removeEvents');
// Add events from JSON data
$('#calendar').fullCalendar('addEventSource',
function(start, end, timezone, callback) {
var events = [];
var overlap = [];
....
我尝试使用以下方法来切换此方法:
// Clear all events to prepare for the next set of events.
$('#calendar').fullCalendar('rerenderEvents');
然而,这只是在现有事件上绘制事件,因此结果是一组相互重叠的事件
我尝试了refetchEvents
和其他一些方法。实际上,我甚至不确定它是否与removeEvents
有关
我的问题是-我如何解决这个问题?如果问题没有像应该的那样详细,我很抱歉,但是我真的不知道如何解决为什么没有呈现事件的问题。我在上面展示的结果在技术上尽可能详细地展示了我是如何调试一切的
编辑:好的,
rerenderEvents
解决了这个问题。rerenderEvents
的唯一问题是[在多个事件数组之间切换时]事件会显示在先前事件的顶部 再次初始化日历之前,您需要调用销毁日历。
为此,您可以调用$('#calendar').fullCalendar('destroy')代码>
在调用destroy
事件后,设置dataset
var myDataset = result;
最后初始化你的日历
$('#calendar').fullCalendar({...
我们如何在JSFIDLE中重新创建这个问题?我不知道,因为更新myDataset
需要调用我的API,但它没有打开=/Re运行它不会模拟这个问题,因为很明显,您正在重新加载所有内容。我使用fullcalendar jquery插件为我的公司构建了一个调度程序。我不得不说,缺乏更新事件的方法是非常令人讨厌的。我解决这一问题的方法是删除事件,然后用$('#calendar').fullCalendar('renderEvent',eventObject,true)将它们添加回;是 啊你说得对。怎么样.fullCalendar('destroy')
@Sushil在addEventSource
之前拥有destroy
只会让日历不显示=P