必须从空数据中重新绘制时,FullCalendar 为空
FullCalendar is blank when having to be redrawn from empty data
我已经尝试调试这个问题好几天了,但一无所获。
我正在使用带有最新 Fiddle 演示的 FullCalendar here
我的数据集如下所示。
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 更新的,它提供了结果过滤功能,因此用户可以设置参数来更新日历视图(这会更改 myDataset
)。
我遇到的一个问题是,当我设置过滤器以使 myDataset
为空,然后取消过滤所有内容以使 myDataset
再次具有数据时,我的 FullCalendar 视图将只是空白,甚至尽管里面有数据,并且正在推送事件(我已经检查过了)。
问题似乎源于 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
的唯一问题是事件显示在先前事件的顶部 [当在多个事件数组之间切换时]。
您需要先调用 destroy
您的日历,然后再 re-initializing
它。
为此,您可以致电 $('#calendar').fullCalendar('destroy');
在您调用 destroy
事件后设置您的 dataset
var myDataset = result;
最后初始化你的日历
$('#calendar').fullCalendar({...
我已经尝试调试这个问题好几天了,但一无所获。
我正在使用带有最新 Fiddle 演示的 FullCalendar here
我的数据集如下所示。
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 更新的,它提供了结果过滤功能,因此用户可以设置参数来更新日历视图(这会更改 myDataset
)。
我遇到的一个问题是,当我设置过滤器以使 myDataset
为空,然后取消过滤所有内容以使 myDataset
再次具有数据时,我的 FullCalendar 视图将只是空白,甚至尽管里面有数据,并且正在推送事件(我已经检查过了)。
问题似乎源于 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
的唯一问题是事件显示在先前事件的顶部 [当在多个事件数组之间切换时]。
您需要先调用 destroy
您的日历,然后再 re-initializing
它。
为此,您可以致电 $('#calendar').fullCalendar('destroy');
在您调用 destroy
事件后设置您的 dataset
var myDataset = result;
最后初始化你的日历
$('#calendar').fullCalendar({...