2013-11-17 5 views
1

fullCalendar - это плагин календаря, который принимает массив объектов и превращает их в события, которые будут отображаться в собственный календарь. Одним из свойств является eventDrop, что позволяет перетаскивать события в календаре.fullCalendar и RangeError: Максимальный размер стека вызовов

Всякий раз, когда происходит событие EventProp, моя функция будет делать $ .post для записи на мою db измененной даты. Однако, я получил следующую ошибку.

RangeError: Maximum call stack size exceeded. 
Extend [jQuery] 
Extend [jQuery] 
... 
Extend [jQuery] 

Это моя функция.

$('#taskCalendar').fullCalendar({ 
     // put your options and callbacks here 
     height: calendarheight = $(window).height() - $("#nav").height() - 140, 
     events: courseTasks, 
     editable: true, 
     eventStartEditable: true, 
     eventDurationEditable: false, 
     eventClick: function(event, jsEvent, view) { 
         tbLoadData(event["id"]); 
        }, 
     eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view) { 

    // Format date for DB 
    var newStart = new Date(event["start"]); 
    var new_due_date = newStart.format("yyyy-mm-dd HH:MM:ss"); 
    event["due_date"] = new_due_date; 

    // Update in DB 
    updateToDB(event); 

} 
    }); 

function updateToDB(data) { 

    $.post("./php/controllers/retrieval.php?fn=dsb_modify_task", data, function(data,status){ 
     $.notify(data.task_name + " is saved\n" + data + "\n" + status , "success"); 
    }); 
} 

Что странно в том, что $ .post работает везде. Кроме этой функции. Кто-нибудь испытал что-то похожее на это? Мне не удавалось выяснить, что происходит.

ответ

1

У меня была такая же проблема, но это потому, что вы отправляете объект события в качестве данных сообщения. Вы должны отфильтровать объект события, например, создав еще один объект с только свойствами, которые вам нужны в качестве id, title, start, end и allDay, и отправьте их как данные для сообщения;)

2

Не отправляйте событие, которое происходит от функции eventDrop. Он имеет некоторые значения, которые вычисляются через вызовы функций.

Необходимо создать новые объекты событий (var new_event = {}) и скопировать атрибуты, которые вы хотите отправить на свой сервер. Затем вы можете отправить этот новый объект без превышения стека вызовов.

0

Проблема с удалением свойства event.source. Просто удалите его, и вы хорошо:

eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view) { 
    delete event.source; 
    return $.post("/edit-event/" + event.id, event, function(data) {...}} 
Смежные вопросы