Обновить событие Fullcalendar после создания?

0

Когда я создаю новое событие, я отправляю его на сервер с помощью REST API tastypie. При создании это событие на сервере имеет новый идентификатор, сгенерированный при сохранении:

select: function (startDate, endDate, allDay, jsEvent, view) {

    /* after selection user will be promted for enter title for event.*/

    var title = prompt('Event Title:');

    /*if title is enterd calendar will add title and event into fullCalendar. */

}
if (title) {
    calendar.fullCalendar('renderEvent', {
            title: title,
            start: startDate,
            end: endDate,
            allDay: allDay
        },
        true // make the event "stick"
    );
    $.ajax({
        url: 'http://localhost:8000/calendar/api/events/events/',
        dataType: 'json',
        contentType: 'application/json; encode=UTF-8',
        type: 'POST',
        data: JSON.stringify({
            title: title,
            start: startDate,
            end: endDate,
            allDay: allDay,
            user: "/calendar/api/events/users/{{ user.id }}/"
        }),
        success: function (data) {
            // Could i do something here?

        }
    });
    console.log({{user.id}},'{{ user}}')

}

},

Мне нужно обновить событие в клиентской памяти, потому что только что созданное событие имеет идентификатор события, например "fc_1" или что-то подобное, но мне нужен идентификатор DB, потому что, если я немедленно перетаскиваю o изменение размера события, я не могу обновите его на сервере, потому что он попытается выполнить PUT это событие, но с неправильным идентификатором (например, "fc_1").

Теги:
fullcalendar

1 ответ

2

в объекте renderEvent вы можете добавить id: 'pending'. Затем в вашей функции успеха вы можете использовать функцию fullcalendar clientEvents, чтобы получить массив событий, а затем использовать updateEvent, чтобы добавить новое значение id:

success: function(data) {
    var newID = data.id;
    var events = calendar.fullCalendar('clientEvents');
    for(var i = 0; i < events.length; i++){
        if(events[i].id == 'pending') {
            events[i].id = newID;
            calendar.fullCalendar('updateEvent', events[i]);
        }
    }
}
  • 0
    Вы можете столкнуться с проблемами задержки, если попытаетесь изменить размер события слишком быстро, а функция обратного вызова еще не сработала. Возможно, вы захотите отключить перетаскивание в функции выбора и снова включить его в обратном вызове. arshaw.com/fullcalendar/docs/event_ui/editable

Ещё вопросы

Сообщество Overcoder
Наверх
Меню