如何在调用Ajax文件前获取FullCalendar正确的intervalStart/End值
解决FullCalendar Ajax请求时无法获取正确intervalEnd的问题
问题核心在于:切换月份时,events配置中Ajax请求的data函数执行时机早于视图更新完成,此时通过$('#calendar').fullCalendar('getView')拿到的是旧视图的intervalEnd;而eventAfterAllRender是视图渲染完成后触发,所以能拿到正确值。
解决方案
通过viewRender钩子(该钩子在视图切换、新视图即将渲染时触发,已持有最新的view对象)提前缓存正确的intervalEnd,后续Ajax请求直接使用缓存值即可:
$(document).ready(function() { // 定义变量缓存当前视图的intervalEnd let currentIntervalEnd = moment(defDate_str); $('#calendar').fullCalendar({ header: { left: 'prev,next today', center: 'title', right: 'month,agendaWeek,agendaDay,listWeek' }, defaultDate: defDate_str, firstDay: 1, navLinks: true, selectable: true, selectHelper: true, editable: false, eventLimit: true, // 视图切换时更新缓存的intervalEnd viewRender: function(view) { currentIntervalEnd = view.intervalEnd; }, events: { url: 'ajax_load_projektkalender.php', type: 'POST', data: function() { var sel_jahr = currentIntervalEnd.format('Y'); var sel_monat = currentIntervalEnd.format('M'); return { sel_jahr : sel_jahr, sel_monat : sel_monat }; }, error: function() { alert('加载事件时出错!'); }, color: 'yellow', textColor: 'black' }, displayEventEnd: { month: false, basicWeek: true, "default": true }, timeFormat: 'H:mm', eventAfterAllRender: function(view) { var cal_enddatum_test = view.intervalEnd; } }); });
说明
viewRender钩子会在每次视图切换(比如点前/后月、切换周/日视图)时触发,此时传入的view参数就是最新的视图实例,intervalEnd值完全正确。- 初始化时把
currentIntervalEnd设为默认日期对应的moment对象,保证首次加载时参数正确。
内容的提问来源于stack exchange,提问作者Daniel Bäuerlein
相关产品推荐
相关产品推荐

