Change Fullcalendar event source after render

后端 未结 4 1435
心在旅途
心在旅途 2020-11-30 07:08

I\'ve been using FullCalendar v1.5.3 for a MS SharePoint replacement.

I\'m trying to re-render the calendar event\'s source. For instance, when the page loads by def

4条回答
  •  情深已故
    2020-11-30 07:40

    Thank you for this example :)

    I was not able to make this ( in above code the events array ) work for me, but i figure out another way to add event sources using some of the code you provided.

    This is my logic:

    My primary source of events is this(this is the events source from the default examples of Fullcalendar):

    events: function(start, end, callback) {
                $.ajax({
                    type: 'POST',
                    url: 'myurl',
                    dataType:'xml',
                    crossDomain: true,
                    data: {
                        // our hypothetical feed requires UNIX timestamps
                        start: Math.round(start.getTime() / 1000),
                        end: Math.round(end.getTime() / 1000),                  
                        'acc':'2',                      
                    },
                    success: function(doc) {                            
                        var events = [];
                        var allday = null; //Workaround
                        var Editable = null; //Workaround  
                        $(doc).find('event').each(function() 
                        {                       
                            if($(this).attr('allDay') == "false") //Workaround 
                                    allday = false; //Workaround 
                            if($(this).attr('allDay') == "true") //Workaround 
                                    allday = true; //Workaround
                            if($(this).attr('editable') == "false") //Workaround 
                                    Editable = false; //Workaround 
                            if($(this).attr('editable') == "true") //Workaround 
                                    Editable = true; //Workaround                       
    
                            events.push({
                                id: $(this).attr('id'),
                                title: $(this).attr('title'),
                                start: $(this).attr('start'),
                                end: $(this).attr('end'),                       
                                allDay: allday,
                                editable: Editable
                            });                             
                        }); 
    
    
                        //calendar.fullCalendar( 'addEventSource', othersources.folgas );
                        //calendar.fullCalendar( 'addEventSource', othersources.ferias );       
                        //calendar.fullCalendar('refetchEvents');               
                        callback(events);
                    }
                });     
            }
    

    Now i needed it to add more sources and to do this ouside the calendar (next to the date variables from fullcalendar examples) i made a variable like the code above, but with ajax calls similar to my primary: )

    var othersources = {
    
       anothersource: {               
                events: function(start, end, callback) {
                $.ajax({
                    type: 'POST',
                    url: 'myurl',               
                    data: {
                        // our hypothetical feed requires UNIX timestamps
                        start: Math.round(start.getTime() / 1000),
                        end: Math.round(end.getTime() / 1000),                  
                        'acc':'7',                      
                    },          
                    success: function(doc) {    
    
                        var events = [];
                        var allday = null; //Workaround
                        var Editable = null; //Workaround  
                        $(doc).find('event').each(function() 
                        {                       
                            if($(this).attr('allDay') == "false") //Workaround 
                                    allday = false; //Workaround 
                            if($(this).attr('allDay') == "true") //Workaround 
                                    allday = true; //Workaround
                            if($(this).attr('editable') == "false") //Workaround 
                                    Editable = false; //Workaround 
                            if($(this).attr('editable') == "true") //Workaround 
                                    Editable = true; //Workaround                       
    
                            events.push({
                                id: $(this).attr('id'),
                                title: $(this).attr('title'),
                                start: $(this).attr('start'),
                                end: $(this).attr('end'),                       
                                allDay: allday,
                                editable: Editable
                            });                             
                        });                         
    
                        callback(events); //notice this
                    }
                });     
    
            },                
                cache: true,
                //error: function() { alert('something broke with courses...'); },
                color: 'green', //events color and stuff
                textColor: 'white',
                //className: 'course'
           }     
     }
    

    The following code is similar to the above and is part of the calendar proprietys (inside calendar variable):

                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 ;)           
            } 
    

提交回复
热议问题