2017-10-12 21 views
2

J'utilise FullCalendar dans mon projet POC. Ce que j'ai sont deux grilles de données (en utilisant jTable). Je veux y mettre des lignes, cliquez sur 'Send Request' puis JSON est en cours de création. Il est envoyé à mon application backend, puis il est traité et la réponse (toujours en JSON) est renvoyée. Mon AJAX-success-handler prend cette réponse et la transforme en objet JavaScript afin d'être mis dans le calendrier.Événements d'actualisation fullcalendar à partir de la variable locale

Tant que j'ai eu la construction comme ceci:

$.post({ 
    // options cut for clean output 
    success: function(data, textStatus, jqXHR) { 
     var eventsToPut = []; 

     $.each(data.taskList, function(k, v) { 
      // OBJECT is created when processing response 
      eventsToPut.push (OBJECT); 
     }); 

     $('#calendar').fullCalendar({ 
      events: eventsToPut, 
      // config of calendar cut 
     });   
    }        
}); 

Il fonctionne très bien. La réponse est rendue et les événements apparaissent sur le calendrier. Le problème est quand je change des données dans mes grilles de données et renvoie la demande au backend. La réponse est valide mais le calendrier ne rafraîchit pas les événements.

J'ai donc décidé d'extraire la création du calendrier avec des événements EMPTY dans la section jQuery.ready() et d'essayer d'actualiser/mettre à jour le calendrier avec les événements quand ils viennent. Jusqu'à présent, j'ai essayé dans mon gestionnaire de «succès»:

$('#calendar').fullCalendar('refetchEvents'); //It should work with feeds but I've tried anyway 
$('#calendar').fullCalendar({ events: eventsToPut}); 
$('#calendar').fullCalendar('updateEvents', eventsToPut); 

Toutefois, le calendrier n'actualise pas les données. Quelqu'un peut-il m'aider à faire actualiser le calendrier avec de nouvelles données?

+0

Comment l'utilisation de [ 'addEventSource'] (https://fullcalendar.io/docs/event_data/addEventSource/) dans votre rappel de succès? Avec le nouveau tableau d'événements. Vous devrez probablement également supprimer les événements précédents en premier. –

Répondre

1

D'abord, supprimer tous les événements du calendrier à l'aide removeEvents

$('#calendar').fullCalendar('removeEvents', function() { return true; }); 

alors, vous pouvez utiliser addEventSource pour ajouter de nouveaux événements

var eventsToPut = []; 

$.each(data.taskList, function(k, v) { 
    // OBJECT is created when processing response 
    eventsToPut.push(OBJECT); 
}); 

$('#calendar').fullCalendar('addEventSource', eventsToPut, true); 
+0

Cela fonctionne mais le problème est que les tâches précédentes sont toujours là (par exemple, si je modifie juste celui existant) la réponse retournée est rendue à nouveau. – Chlebik

+0

Je l'ai corrigé en ajoutant: $ ('# calendar'). FullCalendar ('removeEventSources'); – Chlebik