10
votes

Changer la source d'événement FullCalendar après le rendu

J'utilise FullCalendar V1.5.3 pour un remplacement MS SharePoint.

J'essaie de reporter la source du calendrier. Par exemple, lorsque la page se charge par défaut, ceci est l'appel AJAX

/ Calendrier / Événements / FeedTasks? Start = 1338094800 & End = 1341118800 & _ = 1339103302326

Nous utilisons une boîte de sélection pour modifier la source d'événements uniquement pour afficher uniquement les tâches (tirées de différentes tables), donc après une sélection, l'appel Ajax passe à:

/ Calendrier / Événements / FeedVents? Start = 1338094800 & End = 1341118800 & _ = 1339103302326

cela fonctionne. Toutefois, plutôt que de simplement modifier la source d'événement du calendrier actuel, il crée une table de calendrier en double (crée une nouvelle classe div mas = "Contenu FC" div sur le dessus de l'actuel).

C'est ce que j'ai jusqu'à présent: xxx

Qu'est-ce que je manque?


0 commentaires

4 Réponses :


20
votes

Il existe des méthodes appelées reformulezeventsource () code> et addevessource () code> qui vous permettent de modifier la liste des sources. J'avais une situation similaire où j'avais besoin de cacher l'une des sources de la vue Mois, mais montrez-la dans d'autres contextes, et j'ai trouvé de la suppression et de la ré-ajout d'éléments dans les événements Source Tableaux le moyen le plus propre pour y parvenir.

    var fcSources = {
        courses: {
                    url: base+'accessfm/calendar/courses',
                    type: 'GET',
                    cache: true,
                    error: function() { alert('something broke with courses...'); },
                    color: 'purple',
                    textColor: 'white',
                    className: 'course'
                },
        requests: {
                    url: base+'accessfm/calendar/requests',
                    type: 'GET',
                    cache: true,
                    error: function() { alert('something broke with requests...'); },
                    textColor: 'white',
                    className: 'requests'
                },
        loads:  {
                    url: base+'accessfm/calendar/loads',
                    type: 'GET',
                    cache: true,
                    error: function() { alert('something broke with loads...'); },
                    color: 'blue',
                    textColor: 'white',
                    className: 'loads'
                }
    };
<snip>
    $('#fullcalendar').fullCalendar({
        header: {
                    left: 'title',
                    center: 'agendaDay,agendaWeek,month',
                    right: 'today prev,next'
                },
        defaultView: 'agendaWeek',
        firstDay: 1,
        theme: true,
        eventSources: [ fcSources.courses, fcSources.requests, fcSources.loads ],
        viewDisplay: function(view) {
            if (lastView != view.name){ // view has been changed, tweak settings
                if (view.name == 'month'){
                    $('#fullcalendar').fullCalendar( 'removeEventSource', fcSources.loads )
                                      .fullCalendar( 'refetchEvents' );;
                }
                if (view.name != 'month' && lastView == 'month'){
                    $('#fullcalendar').fullCalendar( 'addEventSource', fcSources.loads );
                }
            }
            lastView = view.name;
        }
    });


2 commentaires

Merci pour la réponse. Avec votre code, j'ai pu proposer ce qui suit: $ ("# tasseSelector"). Changement (OnSelectChange); fonction onSelectChanger () {$ ('# calendrier'). Fullcalendar ('Reforceventsource', root + '/ Evénements /' + Defaultfeed) .Fulcalendar ('Refetchervents'); filefeed = $ ('# tasseSelector'). Val (); $ ('# calendrier'). FullCalendar ('Addeventsource', root + '/ Events / Events /' + Defaultfeed) .fulcalendar ('Refetchervents'); }}); Cela fonctionne bien, mais pourriez-vous voir des problèmes? J'ai défini par défautFeed en haut du code, et jusqu'ici si bon. Merci pour votre réponse!


@Ret Stackoverflow.com/questions/37204410/... Pouvez-vous vérifier cette question?



3
votes

Merci pour cet exemple :)

Je n'ai pas été capable de faire cela (dans le code ci-dessus Le tableau des événements) pour moi, mais je pense qu'un autre moyen d'ajouter des sources d'événements en utilisant une partie du code que vous avez fourni. P>

C'est ma logique: P>

Ma principale source d'événements est-ce (ceci est la source d'événements des exemples par défaut de FullCalendar): P>

            eventSources: [ othersources.anothersource ],           

viewDisplay: function(view) {    
        if (view.name == 'month'){
       // alert(view.name);
            //calendar.fullCalendar( 'addEventSource', othersources.folgas );
            calendar.fullCalendar( 'addEventSource', othersources.anothersource );
            //calendar.fullCalendar('refetchEvents'); //Notice i'm not doing the refetch events. And its working for me. but i'm calling thi elsewhere, every time i make an action. So you must figure it out ;)           
        } 


0 commentaires

2
votes

Ceci est une vieille question, mais j'ai eu un problème similaire et la réponse de RET a vraiment aidé, en fonction de cela que je l'ai correctement corrigé avec un compteur qui réinitialisé pour vous assurer qu'il ne permettrait pas d'ajouter des sources d'événement en double

    count = 0;
fcSources = [wholePlan, allActivities];

//calendar initialization {
viewRender: function(view) {

        if (view.name == 'agendaWeek' || view.name == 'month') {
            $('#fullcal').fullCalendar('removeEventSource', fcSources.allActivities);

            if (count > 0) {
                $('#fullcal').fullCalendar('addEventSource', fcSources.wholePlan);
            }

            count = 0;
        }

        if (view.name == 'agendaDay' && count == 0) {
            $('#fullcal').fullCalendar( 'addEventSource', fcSources.allActivities );
            $('#fullcal').fullCalendar('removeEventSource', fcSources.wholePlan);

            count += 1;
   }
}


0 commentaires

1
votes

Après deux jours, je l'ai eu, c'est mon code:

    $("#search").on("keypress", function(evt){
        if(evt.keyCode == 13) {
            var term = $(this).val();
            $.post(route_search, 
                            {
                                term: term,
                                async: false
                            },
                            function(data) {
                                var parsed = $.parseJSON(data);
                                $('#calendar').fullCalendar('removeEvents');
                                $('#calendar').fullCalendar( 'addEventSource', parsed );
                            }
            );               
        }
    }); 


0 commentaires