Полный календарь - события обновляются, но не отрисовываются

Я играю с полным календарем и получаю события из базы данных. Когда он первоначально отображает их, он проверяет, были ли они сохранены как событие на весь день или нет, и устанавливает allDay в значение true или false в зависимости от результата.

Это работает отлично, но когда новое событие добавляется в календарь, предполагается, что все события будут повторно извлечены, а затем повторно отображены, чтобы они не отображались по умолчанию на все дневные события. Однако, хотя повторная выборка вызывается, повторная визуализация в строке после нее - нет. Однако, если я вызываю строку rerender в своей консоли браузера, она полностью меняет их все так, как они должны быть.

Итак, я предполагаю, что мой вопрос в том, почему fullcalendar повторно загружает события, но игнорирует повторный рендеринг? и есть ли обходной путь для этого?

Спасибо заранее. Мой код:

Первоначальный рендеринг событий:

editable: true,
events: "json-events-log.php",
eventRender: function(event, element) {
            if (event.event_type_id==2) {
                element.addClass("red-event");
            } else if (event.event_type_id==3) {
                element.addClass("blue-event");
            } else {
                element.addClass("green-event");
            }

            if(event.all_day == 0){
                event.allDay = false;
            } else {
                event.allDay = true;
            }

        } 

И функция успеха, которая вызывается после успешной публикации события через AJAX:

$.ajax({
              type: 'POST',
              url: "new_event.php",
              data: ajaxData,
              success: function(data) {
                  if (data.moved==true) {
                    alert('success');

                    $("#calendar").fullCalendar("refetchEvents");
                    $("#calendar").fullCalendar("rerenderEvents");


                    $("#updatingCal").addClass("hiddenUpdate");
                    if ($('#drop-remove').is(':checked')) {

                        $(this).remove();
                    }



                  } else {
                        $("#updatingCal").addClass("hiddenUpdate");
                        console.log('fail');
                    }

              },
              dataType: "json"
            });

person MrFirthy    schedule 19.07.2013    source источник


Ответы (2)


Проблема в том, что вы изменяете данные события в обратном вызове eventRender. Вместо этого вы должны изменить данные в обратном вызове eventDataTransform!

person Gavin Williams    schedule 22.07.2013

Вам нужно кешировать селектор jquery для календаря в переменной - var calendar = $("#calendar").fullCalendar();. И когда вы визуализируете календарь, нужно добавить этот код:

if(calendar){
    calendar.fullCalendar('destroy');
}
calendar = $("#calendar").fullCalendar({
    //your options
});
person joni jones    schedule 22.07.2013