В jquery fullcalendar можно добавить новое событие без обновления всего месяца?

Я использую jquery fullcalendar, и он отлично работает. Мои события происходят от вызова ajax и возвращаются как json.

Я пытаюсь выяснить, есть ли способ добавить события с клиентской стороны, не обновляя весь сервер.

У меня есть возможность добавить новое событие в мой код (который добавляет его в мою базу данных), но единственный способ, которым я знаю, как обновить пользовательский интерфейс, чтобы показать это новое событие, - вызвать refetchevents (но это перезагружает все для месяц назад с сервера.

Есть ли все-таки я могу использовать дополнительные события для всех клиентов, чтобы избежать обновления месяца в месяц?

Я вижу, что я могу удалить события один за другим методом removeEvents (с фильтром id), но я не вижу эквивалента вокруг добавления события.

Обновление:

У меня есть следующий вопрос, на котором даны ответы ниже, которые оба работали. (не было смысла создавать другой вопрос). Я хотел увидеть рекомендуемый способ "обновить" одно событие на стороне клиента. Я попытался просто вызвать "renderEvent" с событием с тем же идентификатором, но создающим новое событие в календаре.

Я вижу, что существует метод UpdateEvent, который, как я полагал, будет ответом, но похоже, что это работает только в том случае, если вы находитесь внутри eventClick (вы не можете просто создать новый объект события, установите идентификатор и измените поле и вызовите обновление.

 http://arshaw.com/fullcalendar/docs/event_data/updateEvent/

Есть ли рекомендуемый способ обновления события с клиентской стороны, аналогичный логике событий Add Clientside ниже?

Сейчас я просто удаляю и читаю в следующем случае:

       $('#calendar').fullCalendar('removeEvents', data.Event.id);
       $('#calendar').fullCalendar('renderEvent', data.Event, true);

Ответ 1

чтобы добавить события на стороне клиента в полный календарь, который вы можете вызвать:

var myCalendar = $('#my-calendar-id'); 
myCalendar.fullCalendar();
var myEvent = {
  title:"my new event",
  allDay: true,
  start: new Date(),
  end: new Date()
};
myCalendar.fullCalendar( 'renderEvent', myEvent );

Я не тестировал этот код, но это должно выполнить работу.

Ответ 2

Вот код, который я использую:

function addCalanderEvent(id, start, end, title, colour)
{
    var eventObject = {
    title: title,
    start: start,
    end: end,
    id: id,
    color: colour
    };

    $('#calendar').fullCalendar('renderEvent', eventObject, true);
    return eventObject;
}

Ответ 3

Как насчет этого?

$("#calendar").fullcalendar('addEventSource', yourEvent); 

Ответ 4

Лучший способ найти обновление без обратной передачи -

 $('#calendar').fullCalendar('removeEvents', data[0].id);
 $('#calendar').fullCalendar('addEventSource', data);

Данные должны быть идентификатором или фильтром для 'removeEvents' http://fullcalendar.io/docs/event_data/removeEvents/

Данные должны быть массивом/URL/функцией для 'addEventSource' http://fullcalendar.io/docs/event_data/addEventSource/

Ответ 5

Вам не нужно добавлять и удалять события для их обновления. Вам просто нужно получить событие из календаря и передать его методу updateEvent:

    function updateCalanderEvent(id, start, end, title, colour)
    {
        var eventObject = $('#calendar').fullCalendar( 'clientEvents', id )

        if (eventObject != null)
        {
            eventObject.title = title;
            eventObject.start = start;
            eventObject.end = end;
            eventObject.color = colour;

            $('#calendar').fullCalendar( 'updateEvent', eventObject );
        }
        return eventObject;
    }

Ответ 6

Я пытался изменить существующее событие, подобное вам, но в моем случае мне нужно, чтобы он использовал один и тот же идентификатор, поэтому я не смог удалить событие и создать другое, потому что это не очень хорошо...

Следуя документации по http://arshaw.com/fullcalendar/docs/event_data/updateEvent/

Я понял, что вам нужно перейти к предложениям:  $ ('# calendar'). fullCalendar ('updateEvent', eventObject); не может быть каким-либо объектом. Это должно быть событие fullcalendar, поэтому он отлично подходит для eventClick-события, но не за пределами этих событий.

Чтобы использовать его вне события fullCalendar, это код, который он работает для меня:

function updateEvent(id, title, date) {

    i = id;

    /*This is the id of the event on full calendar,
    in my case i set this id when I create each event*/

    event = $('#calendar').fullCalendar( 'clientEvents', [i] )[0];
    /*This method returns an array of object with id == i
    That why is necessary to aggregate [0] at the end 
    to get the event object.*/

    if (event != null){
        //make your modifications and update
        event.title = title;
        event.start = date;
        $('#calendar').fullCalendar( 'updateEvent', event );
    }
}

Надеюсь, что это сработает для всех!