AngularJS tenue UI-calendrier référence aux anciens événements

voix
2

J'utilise FullCalendar (-ui-calendar angulaire) dans une application AngularJS. Je passe des événements en utilisant un tableau EventSources: $scope.eventSources = [$scope.events];avec $scope.eventsgénéré et mis à jour par le contrôleur. Mon problème est à chaque fois que je mets à jour $scope.events, FullCalendar semble tenir aux références aux anciens événements.

en index.html:

<div ui-calendar=uiConfig ng-model=eventSources calendar=myCalendar>

Ma fonction updateEvents ressemble à ceci:

public updateEvents(newEvents) {
    // remove old events
    $scope.events.splice(0, $scope.events.length);

    // add new events using push
    for (var i = 0; i < newEvents.length; i++) {
        $scope.events.push(newEvents[i]);
    }
}

Malheureusement, la fonction ci - dessus ne se débarrasse pas des anciens événements , sauf si je fais un appel explicite à réextrayez événements de EventSources:

$scope.myCalendar.fullCalendar('refetchEvents');

J'ai trouvé une question similaire ( UI-calendrier AngularJS pas la mise à jour des événements sur le calendrier ), et la réponse de Studio4Development semble le plus pertinent. Cependant, je pense que je suis maintenant la même instance de tableau en utilisant poussée et épissure.

Créé 04/11/2014 à 14:16
utilisateur
Dans d'autres langues...                            


2 réponses

voix
3

J'ai réussi à comprendre pourquoi cela se passait en traçant le code de la bibliothèque, pour se rendre compte que le calendrier ui-angulaire j'installé à l' aide était charmille pas à jour. Pour une raison quelconque, installe la version charmille 0.8.1par défaut, tout 0.9.0-beta.1est nécessaire pour la compatibilité avec fullCalendar v2. Je n'ai pas pu reproduire ce problème dans plnkr car plnkr fournit fullCalendar 1.6 par défaut, ce qui est compatible avec les anciennes versions de-ui-angulaire calendrier.

En particulier, la fonction

eventsWatcher.onRemoved = function(event) {
      scope.calendar.fullCalendar('removeEvents', function(e) { 
          return e === event; 
      });
};

à être mis à jour

eventsWatcher.onRemoved = function(event) {
    scope.calendar.fullCalendar('removeEvents', function(e) { 
        return e._id === event._id;
    });
};

L'ancienne fonction passerait fullCalendar un filtre qui ne correspond pas à quoi que ce soit, en raison du fait que fulLCalendar v2 ajoute quelques champs à chaque événement (objet momentJS, par exemple).

TL; DR

-Ui-angulaire calendrier n'a pas été tenue référence aux anciens événements. Au lieu de cela, il n'a pas été correctement événements enlève. Mise à jour vers la dernière version bêta résout ce problème.

Créé 07/11/2014 à 14:14
source utilisateur

voix
0

ne sont pas édités événements mis à jour.

Il y a un bug dans la fonction fullCalendar.js filterLegacyEventInstances(). Vous pouvez le fixer à partir de :

return legacyEventInstance.id == legacyQuery;

à:

return legacyEventInstance._id == legacyQuery;

et de l'utiliser au lieu de réduire au minimum le code.

Créé 10/10/2017 à 17:52
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more