jquery – 渲染后更改Fullcalendar事件源

我一直在使用FullCalendar v1.5.3进行MS SharePoint替换.

我正在尝试重新渲染日历事件的来源.例如,当页面默认加载时,这是ajax调用

/calendar/events/FeedTasks?start=1338094800&end=1341118800&_=1339103302326

我们使用选择框将事件源更改为仅显示任务(从不同的表中提取),因此在选择之后,ajax调用将更改为:

/calendar/events/FeedEvents?start=1338094800&end=1341118800&_=1339103302326

这很有效.但是,它不是仅仅更改当前日历事件源,而是创建一个重复的日历表(在当前日历表之上创建一个新的div class =“fc-content”div).

这是我到目前为止:

$("#TaskSelector").change(onSelectChange);   
    function onSelectChange(){
        $('#calendar').fullCalendar({
            events: '/calendar/events/' + $('#TaskSelector').val()
        });
    }
});

我错过了什么?

解决方法

有一些名为removeEventSource()和addEventSource()的方法允许您调整源列表.我有一个类似的情况,我需要在月视图中隐藏其中一个源,但在其他上下文中显示它,我发现在eventSources数组中删除和重新添加元素是实现此目的最干净的方法.
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',error: function() { alert('something broke with requests...'); },className: 'requests'
                },loads:  {
                    url: base+'accessfm/calendar/loads',error: function() { alert('something broke with loads...'); },color: 'blue',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;
        }
    });

不要只是复制/粘贴此代码,因为它不能完全解决您的问题.但是你应该能够从中获取一些想法.调整fcSources哈希以适合您的源,然后仅使用其中一个源实例化您的fullCalendar对象,并使用removeEventSource和addEventSource方法交换它.

还要注意refetchEvents()的使用 – 这是确保正确重新呈现显示所必需的.

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...