Jquery 使用FullCalendar筛选事件并将其添加回

Jquery 使用FullCalendar筛选事件并将其添加回,jquery,fullcalendar,Jquery,Fullcalendar,在使用removeEvent方法删除事件后,将事件添加回日历时遇到问题 我有一个JSON对象,包含用户应该看到的所有日历事件。列表中填充了复选框,使用户能够通过以下代码按类别显示和隐藏事件 var value = $(this).val(); $('#calendar').fullCalendar('removeEvents', function(event) { return event.subscription == value; }); 我希望显示/呈现用户在重新选中相应框时选择隐藏的事

在使用removeEvent方法删除事件后,将事件添加回日历时遇到问题

我有一个JSON对象,包含用户应该看到的所有日历事件。列表中填充了复选框,使用户能够通过以下代码按类别显示和隐藏事件

var value = $(this).val();
$('#calendar').fullCalendar('removeEvents', function(event) {
return event.subscription == value;
});
我希望显示/呈现用户在重新选中相应框时选择隐藏的事件,而不重新加载整个页面和JSON源,但保留未选中、删除的其他事件

有没有办法使用我用来删除事件的相同数据来实现这一点?
即。
return event.subscription==值

以下是我用于我的应用程序的实现。我创建了一个自定义EventManager对象,它保存了我所有事件的主数组。另外,我告诉fullCalendar要在日历中加载哪些事件子集(使用'addEventSource'和'removeEventSource'方法)

希望这有帮助!:-)


谢谢,这是一个有趣的替代方式,我正在进行的。我会给它一个机会,当我有一些时间,我用这个编辑版本来完成我需要的,谢谢你的指导!注意,代码中有一个问题(希望是一个副本检查;))请确保使用
filterFN(事件)执行某些操作如果你想让jquery的map函数发挥任何作用。很高兴这有帮助,差不多2年后:p
EventManager = (function(){

    var rootEventSource = [];
    var filteredEventSource = [];   

    return {
        // Usage: EventManager.setSource([pass,event,array,here]);
        setRootSource : function(events){
            rootEventSource = events;   
        },

        filterCalendar : function(filterFN){

            $("#calendar").fullCalendar('removeEventSource',filteredEventSource);

            filteredEventSource = $.map(rootEventSource, function(event){
                filterFN(event);
            });

            $("#calendar").fullCalendar('addEventSource', filteredEventSource); 
        }
    }; 
})();

//In your fullcalendar init code:
$("#calendar").fullCalendar({
    //  init options
    //  go in here...
    , events: function( start, end, callback ) {
        //get events from your server, etc...
        events = some ajax function(start, end)...

        //store the full set of events in our Event Manager 
        EventManager.setRootSource(events); 
        //pass fullcalendar an empty array
        callback([]);
    }
});


//in your check/uncheck handler
value = $(this).val();
EventManager.filterCalendar(function(event) {
    return event.subscription == value;
});