我正在尝试删除在某个开始日期之前的完整日历上的所有事件(假设开始日期是2016年10月17日)。
以下是我的代码:
$("#calendar").fullCalendar('removeEvents', function(eventObject) {
//return true if the event 'eventObject' needs to be removed, return false if it doesn't
if (moment(eventObject.start).isBefore(start_date)) {
return true;
}
});
因此,在加载页面时,10月17日至2016年10月17日之前的所有事件都将消失。但是,如果我导航到下个月(即11月),然后导航回到10月,所有被删除的事件都会突然回来!
如何使其在初始化时保持删除开始日期之前的事件。我是否需要将此脚本包装在每月发生更改时触发的事件中?
答案 0 :(得分:1)
有几种方法可以做到。
如果您对此有所控制,请在后端执行此操作。这是最好的选择,因为您将在服务器端过滤事件,请求响应会更小,并且不需要进行javascript处理。
您可以使用events as a function
和"操纵"在请求中发送的日期,因此如果开始日期在您需要的日期之前,您只需更新发送到服务器的参数。像这样:
var startDate = moment("17-10-2016", "DD-MM-YYYY");
$('#calendar').fullCalendar({
// use events as a function instead of a json feed
events: function(start, end, timezone, callback) {
// Before the request to the server, check if the `start` param is before `startDate`
// then the parameter will be the startDate.
// This way the server would return the events after that date
// Beware: you might need to tweak the end parameter as well
var startParam = start.isBefore(startDate) ? startDate : start;
$.ajax({
url: '/fullcalendar/events18',
dataType: 'json',
data: {
start: startParam.format('YYYY-MM-DD'),
end: end.format('YYYY-MM-DD')
},
success: function(data) {
callback(data.sourcename);
}
});
}
});
根据smcd对其评论的建议,您可以使用eventRender
删除在您想要的日期之前发生的事件。类似的东西:
var startDate = moment("17-10-2016", "DD-MM-YYYY");
$('#calendar').fullCalendar({
events: '/fullcalendar/events18',
eventRender: function(event, element) {
// if the start date of the event occured before `startDate`, return false and don't render the event
if (event.start.isBefore(startDate)) {
return false;
}
}
});