Я хочу добавлять события в свою БД через fullcalendar. Итак, я хочу добавить событие и установить его идентификатор равным идентификатору, который он получает в моей БД.
function addCalEvent(event) {
var jEvent = {};
jEvent['startTime'] = moment(event.start).unix();
jEvent['worker'] = "GUZ"
jEvent['title']=event.title;
if (event.end) {
jEvent['endTime'] = moment(event.end).unix();
}
$.ajax({
url: 'dux.html',
type: 'POST',
data: {
type: 'addNewEvents',
event: jEvent,
REQUEST_TOKEN: "REQUEST_TOKEN>",
},
datatype: 'json',
success: function(data) {
event.id=data;
event.title = "NEW";
$('#calendar').fullCalendar('updateEvent', event);
},
});
}Ajax извлекает идентификатор добавленного события, а идентификатор и заголовок действительно меняются, но метод updateEvent, похоже, не вызывается, потому что нет изменений в заголовке или идентификаторе визуализированного события.
Я вызываю renderEvent в функции dayClick и после этого вызываю addCalEvent.
event.id=data это действительно проблема я думаю. После изменения идентификатора fullCalendar не сможет сопоставить его с существующим событием (потому что, если вы не предоставите идентификатор события при первом создании события, fullCalendar автоматически назначит его для вас). Но ваша логика вернулась на передний план ... вам нужно сначала отправить данные события на свой сервер и вернуть идентификатор. Только тогда, когда вы знаете, что сервер принял событие и успешно сохранил его, вы должны создать событие в fullCalendar с помощью renderEvent. И тогда вам вообще не нужно updateEvent.
@ADyson Я согласен с ADyson в этом вопросе. Согласно документам, вы не можете обновить событие, которое вы создали сами, это должно быть событие из календаря, например. событие вернулось на eventClick. Поэтому я думаю, что лучший способ действий - это то, что предложил ADyson, отправьте запрос ajax, чтобы получить идентификатор события из вашей базы данных в событии dayClick, а затем, используя этот идентификатор, создайте свое событие и затем вызовите renderEvent



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете вручную вызывать события повторной визуализации с помощью $('#calendar').fullCalendar( ‘rerenderEvents’ )
Ссылка на документы здесь
Но я не хочу повторно отображать все события. Вот почему я хотел использовать метод updateEvent.
Не могли бы вы добавить jsfiddle своей проблемы?
Хорошо, по-видимому, если вы выполняете асинхронный вызов ajax, порядок, в котором выполняются команды, не является тем порядком, в котором вы его пишете. Мне нужно добавить async: false, чтобы это сработало.
Как вы добавляете свои новые события в календарь?