Comment supprimer cet événement de FullCalendar?

le calendrier permet à l'utilisateur de faire glisser un timeslot sur le calendrier, mais je voudrais qu'ils puissent le supprimer s'ils cliquent dessus.

donc dans le Click event j'ai cette fonction:

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

il passe simplement dans l'Événement du calendrier et le calendrier lui-même.

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

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

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

j'ai aussi essayé d'utiliser un filtre, mais un point d'arrêt sur l'instruction return n'est jamais atteint.

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

des idées? (Je sais que l'Id est de droite, et la dernière ligne de travaux). Firebug ne montre aucune erreur dans le javascript.

J'utilise FullCalendar v1.4.10

17
demandé sur Brandon 2011-01-10 20:04:40

6 réponses

au lieu d'utiliser votre passe dans cal, pouvez-vous essayer d'utiliser un appel à la div qui tient votre calendrier?

Dans le cas de eventClick,this renvoie au HTML de l'événement selon ce que je lis dans les docs.

4
répondu justkt 2011-01-10 22:44:43

lorsque vous avez toutes vos pièces d'identité en place, utilisez la solution de Tuan.

Mais quand vous N'avez pas d'id dans votre événement faites-le comme ceci (ce travail aussi quand vous avez l'ensemble d'id):

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

Pourquoi ce problème? La raison commune pour cela est fullcalendar n'ajoute pas id automatiquement lorsque vous ajoutez un nouvel événement. Si c'est le cas, l'id que vous avez passé n'est pas défini. Fullcalendar utilise id dans les deux cas lorsque vous essayez de supprimer en utilisant id ou filter. Donc quand c'est valeur est non définie il retourne toujours false. Signification la liste des éléments à supprimer est toujours vide.

26
répondu elon 2013-02-15 15:43:08

Encore plus simple:

eventClick: function(calEvent, jsEvent, view) {
    $('#calendar').fullCalendar('removeEvents', function (event) {
        return event == calEvent;
    });
}
8
répondu seddonym 2014-11-18 16:03:21

Utiliser refetchEvents:

cal.fullCalendar("refetchEvents");
4
répondu Julio 2011-09-12 16:24:44

la réponse de Justkt m'a pris une seconde pour me faire une idée, mais je posterai mes résultats pour tous les autres noobs qui ont besoin de voir le code d'une manière très simple:

eventClick: function(event){
  var event_id = event.id;
  $.post('/Dropbox/finance/index.php/welcome/update', {"event_id": event_id},
      function(data){
          $('#calendar').fullCalendar("removeEvents",  (data));
          $('#calendar').fullCalendar("rerenderEvents");                
        }
      });   
}

Le PHP (en utilisant codeignighter):

public function update(){
  $result = $this->input->post('event_id');
  echo $result;
  // would send result to the model for removal from DB, or whatever
}
3
répondu Dane Calderon 2012-10-04 15:51:33

j'utilise la fonction filter avec event.démarrer et ça fonctionne bien

calendar.fullCalendar('removeEvents', function(event) {
  return 
    $.fullCalendar.formatDate(event.start, 'yyyyMMdd') 
    == $.fullCalendar.formatDate(start, 'yyyyMMdd');
});
2
répondu Tuan 2012-10-06 01:43:14