Une question similaire, mais qui me semble toujours unique: Framework7 datepicker modifie les événements après l’initialisation
J’ai un calendrier en ligne avec des événements qui se chargent à partir d’un script AJAX et je peux le faire fonctionner, mais des centaines d’événements dureront de nombreuses années. Ce dont j’ai besoin, c’est d’un moyen de charger uniquement les événements du mois et de les append si nécessaire. Je pensais que cela pourrait être fait avec onMonthAdd, mais le problème que je rencontre est que, lorsque j’applique un nouvel élément à p.events, le nouvel événement n’est chargé que lorsque le mois est supprimé de l’élément et lu.
Par exemple: onMonthAdd pour janvier J’ajoute un événement pour le 11 janvier. Ensuite, lorsque janvier est affiché, l’événement ne s’affiche pas. Mais lorsque je reviens en décembre, puis en novembre, le calendrier du mois de janvier est supprimé du DOM. Ensuite, vous retournez au mois de janvier, qui recrée le mois dans le DOM, puis affiche l’événement.
La question principale est de savoir comment il est possible d’append des événements juste avant la création de l’élément dans le DOM si onMonthAdd semble être déclenché après l’ajout du mois au DOM . Je n’ai trouvé aucune référence à une fonction beforeMonthAdd.
AJAX n’est pas pertinent et je peux le faire fonctionner, si je pouvais trouver un moyen d’append simplement un événement (sans AJAX) à un mois ajouté.
Voici du code que j’ai essayé (excluant AJAX) mais il ne fonctionne pas car il a créé le calendrier mais ne met pas à jour les nouvelles dates jusqu’à ce que le mois dans DOM soit recréé:
... var calendarInline = myApp.calendar({ container: '#calendar-inline-container', weekHeader: true, firstDay: 0, events: [ new Date(2017,7,1), new Date(2017,7,31), new Date(2017,8,1), new Date(2017,8,30), new Date(2017,9,1), new Date(2017,9,31), new Date(2017,10,1), new Date(2017,10,30), new Date(2017,11,1), new Date(2017,11,31) ], onMonthAdd: function(p,monthContainer){ var thisYear = $(monthContainer).find('picker-calendar-month').context.atsortingbutes['data-year'].value; var thisMonth = $(monthContainer).find('picker-calendar-month').context.atsortingbutes['data-month'].value; if(thisMonth==0){ p.params.events.push(new Date(thisYear,thisMonth,11)); } }, }); ...
J’ai trouvé un moyen détourné d’y parvenir en exécutant setYearMonth en utilisant l’année et le mois en cours pour «recharger» le calendrier, mais le problème est que lors du changement d’année, il créera une boucle sans fin. Voici le code correspondant. cette:
... onMonthAdd: function(p,monthContainer){ var thisYear = $(monthContainer).find('picker-calendar-month').context.atsortingbutes['data-year'].value; var thisMonth = $(monthContainer).find('picker-calendar-month').context.atsortingbutes['data-month'].value; if(thisMonth==0){ p.params.events.push(new Date(thisYear,thisMonth,11)); p.setYearMonth(p.currentYear, p.currentMonth, 1); } }, ...
Certaines de mes découvertes sur framework7 et object calendar:
Voici le correctif, je ne publie pas tout le code, mais juste le processus
Cela fonctionne très bien pour mon projet et l’interaction de l’utilisateur est fluide et rapide.