Повторная передача событий в fullCalendar после обновления базы данных Ajax
Я пытаюсь, чтобы fullCalendar отражал изменения, внесенные в базу данных через AJAX. Проблема заключается в том, что после успешного вызова AJAX он не будет обновлять календарь на экране.
$.ajax({
type: "POST",
url: "eventEditXHR.php",
data: {
//the data
},
success: function(text) {
$("#calendar").fullCalendar("refetchEvents");
}....
Я использую неправильный метод? Какой был бы лучший способ выполнить это, не перезагружая всю страницу? Спасибо за любой вклад!
Ответы
Ответ 1
Существует несколько способов. Некоторые менее элегантные.
1. Если вы используете FullCalendar для захвата событий json:
$('#calendar').fullCalendar({ events: "json-events.php", });
Просто выполните:
$('#calendar').fullCalendar( 'refetchEvents' );
Если вы хотите, чтобы внешний метод выбирал события, которые вы могли бы сделать. Не элегантный, но будет работать
$('#calendar').fullCalendar( 'removeEventSource', source )
$('#calendar').fullCalendar( 'addEventSource', source )
Ответ 2
Вы можете отображать события в 3 шага.
1) удалить все события
.fullCalendar( 'removeEvents');
2) добавить источник событий
.fullCalendar( 'addEventSource', events);
3) отображать события
.fullCalendar( 'rerenderEvents' );
Как...
$.ajax({
type: "POST",
url: "eventEditXHR.php",
data: { //the data },
success: function(events)
{
$('#calendar').fullCalendar('removeEvents');
$('#calendar').fullCalendar('addEventSource', events);
$('#calendar').fullCalendar('rerenderEvents' );
}.
});
Ответ 3
Это то, что работает в ASP.NET CORE, MVC 6:
success: function(events)
{
$('#calendar').fullCalendar('rerenderEvents');
$('#calendar').fullCalendar('refetchEvents');
}
пока он работал в ASP.NET MVC 5:
success: function(events)
{
$('#calendar').fullCalendar('refetchEvents');
}
Ответ 4
Что работает для меня:
success: function(text) {
setTimeout(function(){
$("#calendar").fullCalendar("rerenderEvents");
},50);
}
Если я делаю это напрямую без таймаута, это не работает, вероятно из-за того, что переменная $element.fullCalendar еще не установлена полностью?
Ответ 5
Для FullCalendar v3.8.0 будет работать следующее:
var events = [
{title: 'Business Lunch', start: '2017-12-03T13:00:00'},
{title: 'Meeting', start: '2017-12-13T11:00:00'},
{title: 'Conference', start: '2017-12-18', end: '2017-12-20'},
];
$('#calendar').fullCalendar({
defaultDate: '2017-12-12',
events: function (start, end, tz, callback) {
callback(events);
}
});
events.push({title: 'Party', start: '2017-12-29T20:00:00'});
$('#calendar').fullCalendar('refetchEvents');
jsbin
Ответ 6
Одна строка делает работу:
$('#calendar').fullCalendar('refetchEventSources', 'eventEditXHR.php')
Поздний ответ, но это должен быть самый эффективный способ, начиная с 2.8.0
Ответ 7
eventDrop: function (event, delta, revertFunc) {
var id = event.id;
var start = event.start.format();
$.ajax({
url: getURLRoot() + 'Diary/UpdateEventTimestamp',
type: "POST",
data: { id: id, start: start },
success: function () {
$('#calendar').fullCalendar('refetchEvents');
}
});
}