removeEvents仅删除当月的事件

时间:2012-12-13 21:14:35

标签: jquery fullcalendar

当我使用$('#calender).fullCalendar('removeEvents');时,这只会删除当前月份(12月)的事件,而不会删除其他事件(11月,1月,2月......)。

如何删除所有活动?

$(document).ready(function(){
    var UsrAux;        
    UsrAux=$('#name').val();                  
    $('#name').blur(function(){    
        UsrAux=$('#name').val();                        
        var source =   {
            url: 'CalendarServer.php',
            type: 'POST',
            data: {                            // Parms
                uno: 'Somenthing',    
                UsrCdg: UsrAux                                            
            },
            error: function() {
                alert('error!');
            },
            color: '#e2ebef',   // a non-ajax option
            textColor: 'black' // a non-ajax option
        };                                 
        $('#calendar').fullCalendar('removeEvents');
        $('#calendar').fullCalendar('addEventSource', source);
    });  

    $('#calendar').fullCalendar({
        draggable: true, 
        height: 400,    
        cache: true, 
        eventSources: [
        // your event source
        {
            url: 'CalendarServer.php',
            type: 'POST',
            data: {                            // Parms
                uno: 'something',    
                UsrCdg: $('#name').val()                                            
            },
            error: function() {
                alert('error!');
            },
            color: '#e2ebef',   // a non-ajax option
            textColor: 'black' // a non-ajax option
        }]       
    });
});

1 个答案:

答案 0 :(得分:0)

如果要删除事件的子集,在这种情况下,我们将通过添加到每个事件的添加类名称(“模板”)进行过滤:

$myCal.fullCalendar( 'removeEvents', function( event ) {
     if( _.indexOf( event.className, 'template' ) > -1 ) {
          return true;
     }
     else {
          return false;
     }
} );

在你的情况下,我每个月的变化是从给定的来源重新加载。我避免这种行为的一种方法是将源加载到日历之外,然后只注入数组。例如:

var myCalEvents = fetchEvents(...);

// this is not reload with each change in calendar view 
$myCal.fullCalendar( 'addEventSource', myCalEvents );

修改

我会打破这个问题。

首先创建一个功能来拉下每个人的日历

function getCalByPersonId( perId ) {
  // returns an array of fullcalender events pulled from the server
  // note each event will have a css class added by the name of
  // 'perid_x' where 'x' ist he perId parameter
  return ...{ajax call goes here}
}

接下来创建一个函数来处理person change事件。

function handlePersonChangeEvent( event ) {
  // first extract person id
  var perId = ... {code to get the person id}

  // clear any existing events for a previously selected person
  if( currentPerId && currentPerId !== perId ) {
    ...{remove code from above goes here, but replace 'template' with 'perId_x' where x is the currentPerId}
  }

  // add the new person's events to the calendar
  $myCal.fullCalendar( 'addEventSource', function() {
    return getCalByPersonId( perId );
  } );

  // set the current person id
  currentPerId = perId;
}

我相信会或多或少会做你想要完成的事情。