我一直在使用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()的使用 – 这是确保正确重新呈现显示所必需的.