有没有办法根据className FullCalendar切换事件可见性

时间:2016-10-26 14:51:16

标签: javascript jquery fullcalendar

我想知道是否有办法使用完整日历来显示/隐藏基于该事件的className的元素。

具体情况是我有一个复选框(让我们说#daytimeEvent)并且我想切换事件的可见性htat在数组中有类日期....

我到目前为止尝试了这个,但似乎完全删除了日历中的事件而没有可能让它们回来......

这是我目前的代码:

$('#daytimeEvent').on('change', function(){
  if ($(this).is(':checked'))
    {
      // That part doesn't work
      calendar.fullCalendar('renderEvent');  
    }
   else
   {
      // This seems to destroy the event without having the opportunity to toggle the visibility back after
      calendar.fullCalendar('removeEvents', function(event){
         return $.inArray('daytime', event.className)
      });
   }
}

我已经抓了谷歌,似乎我不是唯一有这个问题的人,但我找不到任何解决方案。

3 个答案:

答案 0 :(得分:3)

我找到了一个解决方案(感谢@smcd的参考)。执行此操作的好方法是使用日历的eventRender方法。我把我的逻辑放在那里,然后做了这个:

$('#myCalendar').fullCalendar({
     // your init [...] then
     eventRender: function(event, element) {
            // Array that will store accepted classes
            var eventAcceptedClasses = [];
            if ($('.daytime-events-checkbox').is(':checked')){
                eventAcceptedClasses.push('daytime-events');
            }
            if ($('.nighttime-events-checkbox').is(':checked')){
                eventAcceptedClasses.push('nighttime-events');
            }
            displayEvent = false;
            event.className.forEach(function(element){
                if ($.inArray(element, eventAcceptedClasses) != -1){
                    displayEvent = true;
                }
            });
            return displayEvent;
        }
});

然后,要做的事情就是在事件监听器中使用rerenderEvents方法,如下所示。

$('.events-filter-checkbox').on('change', function(){
    calendar.fullCalendar('rerenderEvents');
});

你无法在demande上隐藏和显示事件,但你可以重新渲染,这是非常灵活和快速的。

答案 1 :(得分:0)

你犯的一个错误就是如何检查班级存在:

$.inArray('.daytime', event.className)

.daytime中没有字符className,您应该检查daytime而不是.):

$.inArray('daytime', event.className)

答案 2 :(得分:0)

我认为可接受的答案有些陈旧,因此,解决此问题的新方法是使用batchRendering