Как удалить это событие из FullCalendar? - PullRequest
17 голосов
/ 10 января 2011

Календарь позволяет пользователю перетаскивать временной интервал на календарь, однако я бы хотел, чтобы он мог удалить его, если щелкнет по нему.

Итак, в случае клика у меня есть эта функция:

function (calEvent) {
  removeRequestedEvent($(this), calEvent);
},

Он просто передает событие календаря и сам календарь.

removeRequestedBooking: function (cal, calEvent) {
    if (!confirm("Delete?"))
        return;

    cal.fullCalendar("removeEvents", calEvent.id);
    cal.fullCalendar("rerenderEvents");

    // Re-show draggable element
    $("#requests #" + calEvent.id).show();
}

Я также пытался использовать фильтр, но точка останова в операторе return никогда не достигается.

    cal.fullCalendar("removeEvents", function (event) {
        return event.id == calEvent.Id;
    });

Есть идеи? (Я знаю, что идентификатор правильный, и последняя строка работает). Firebug не показывает никаких ошибок в JavaScript.

Я использую FullCalendar v1.4.10

Ответы [ 6 ]

27 голосов
/ 15 февраля 2013

Когда у вас есть все ваши идентификаторы, используйте решение Туана.

Но если у вас нет идентификаторов в вашем событии, сделайте это следующим образом (эта работа также работает, когда у вас установлен идентификатор):

eventClick: function(event){
   $('#myCalendar').fullCalendar('removeEvents',event._id);
}

Почему эта проблема появляется? Распространенной причиной этого является то, что fullcalendar не добавляет идентификатор автоматически при добавлении нового события. Если это так, идентификатор, который вы передали, не определен. Fullcalendar использует идентификатор в обоих случаях, когда вы пытаетесь удалить, используя идентификатор или фильтр. Поэтому, когда его значение не определено, оно всегда возвращает false. Список значений элементов для удаления всегда пуст.

8 голосов
/ 18 ноября 2014

Еще проще:

eventClick: function(calEvent, jsEvent, view) {
    $('#calendar').fullCalendar('removeEvents', function (event) {
        return event == calEvent;
    });
}
4 голосов
/ 12 сентября 2011

Использовать refetchEvents:

cal.fullCalendar("refetchEvents");
4 голосов
/ 11 января 2011

Вместо использования переданного в cal, вы можете попробовать использовать вызов div, который содержит ваш календарь?

В случае eventClick , this относится к HTMLдля события в соответствии с тем, что я читаю в документах.

3 голосов
/ 04 октября 2012

Ответ Justkt занял у меня секунду, чтобы обернуть голову, но я опубликую результаты для всех других нубов, которым нужно действительно просто увидеть код:используя codeignighter):

public function update(){
  $result = $this->input->post('event_id');
  echo $result;
  // would send result to the model for removal from DB, or whatever
}
2 голосов
/ 09 сентября 2012

Я использую функцию фильтра с event.start, и она хорошо работает

calendar.fullCalendar('removeEvents', function(event) {
  return 
    $.fullCalendar.formatDate(event.start, 'yyyyMMdd') 
    == $.fullCalendar.formatDate(start, 'yyyyMMdd');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...