我正在使用jquery fullCalendar插件,我遇到了一个奇怪的问题.
当我加载第一个月(在这种情况下2013年12月)它工作正常.我调用我的ajax事件并返回一组事件.我从我的服务器返回40个事件,我看到40个事件呈现.
然后我转到下个月(2014年1月),它也运行良好.(来自服务器的41个事件和GUI中显示的41个事件)
然后我点击BACK返回到2013年12月,我得到了ajax事件,它返回相同的40个事件(如上所述),但是当日历加载时,它会看到12月份的每个事件都重复(GUI上显示80个事件),即使我只从服务器发回40,我在事件回调期间看到40.
这是我的代码:
$('#calendar').fullCalendar({ header: { left: 'prev,next title today', right: '' }, lazyFetching: false, editable: false, timeFormat: 'H:mm{-H:mm} ', viewDisplay: function (view) { ViewDisplay(); }, events: function (start, end, callback) { $('#Month').val($('#calendar').fullCalendar('getDate').getMonth() + 1); $("#Year").val($('#calendar').fullCalendar('getDate').getUTCFullYear()); var serializedFormInfo = $('#rotaForm').serialize(); $.ajax({ url: '/SupportRota/GetEvents/', dataType: 'json', cache: false, data: serializedFormInfo, success: function (data) { callback(data.RotaEvents); } }); } });
我尝试添加lazyLoading:false,因为我认为它是某种缓存,但这似乎并没有解决问题.
我在萤火虫上放了一个断点
callback(data.RotaEvents)
我看到40个事件,但在上述场景中屏幕上会显示80个事件.
有什么建议吗?
也许是一个"硬核"答案,但很简单:我认为事件可以在浏览器中缓存并解释为什么你有重复.
只需在ajax
通话前添加此行:
$('.fc-event').remove();
您不必担心此事件是否已经呈现,并且在加载方面可能更快.
如果事件已设置为
$('#calendar').fullCalendar('renderEvent', copiedEventObject, true);
(如我发现的示例中)您可能希望使用以下命令指定事件创建:
$('#calendar').fullCalendar('renderEvent', copiedEventObject, false);
false会使事件"不粘"(这是默认行为;您也可以只删除true)并允许事件在日历重新获取事件时消失 - 这对我来说是这样的:-)