我在使用Fullcalendar时遇到了困难。基本上我必须使用ajax逐月获取事件,否则渲染日历需要太长时间,因为事件非常复杂。我可以获取事件并将它们添加到日历中没有问题,但问题是,当您添加新数据源时,所有事件都会正常呈现,但dayRender事件永远不会被触发,因此我的自定义背景和qtips不应用,因为它们应该因为他们只是在dayRender事件中被应用。
有一个选项可以破坏然后渲染日历(重绘日历)以触发dayRender事件,但出于某种原因,如果我正在做:
$('#calendar').fullCalendar('destroy');
$('#calendar').fullCalendar('render');
日历正在被破坏,但从未重新创建 - >没有任何反应(也没有警告或错误信息)。
在以与$('#calendar').fullCalendar( 'addEventSource', myevents );
类似的方式初始化日历后,有没有办法调用dayRender事件?
或许您可以提供一些替代解决方案?
答案:
好的,经过几个小时尝试不同的事情后,我相信我找到了一个解决方法:
$('#calendar').fullCalendar('prev');
$('#calendar').fullCalendar('next');
由于某种原因会调用dayRender事件。
答案 0 :(得分:5)
好的,经过几个小时尝试不同的事情后,我相信我找到了一个解决方法:
首次初始化日历时,您将创建一个未来事件数组并向其添加1个虚拟记录(否则它将不会创建日历)。 使用此数组初始化日历。 创建ajax调用以添加日历的新数据源,并将事件推送到您在第一步中创建的阵列中。 将事件推入主数组后,执行以下代码:
$('#calendar').fullCalendar('prev');
$('#calendar').fullCalendar('next');
由于某种原因会调用dayRender事件。
答案 1 :(得分:0)
跟进uFlock ...也有同样的问题。在我对数据库模型事件进行AJAX检索之后,将调用此函数,该事件会扩展(它们表示重复)。然后,我使用发布的“ hack” uFlock解决了我面临的相同问题。
function gsearchRender_calendar(data){
var dest = $("#gsearch-content .tab[data-tab='gsearch-tab-calendar'] .events-con");
var calendar = $(dest).fullCalendar('getCalendar');
var method = $("#gsearch-content [name='gsearch-method']").val();
var ctx = method.split(/,/)[0];
calendar.removeEventSource("gsearch");
calendar.addEventSource({
id:'gsearch',
color:(ctx=='happening') ? 'green' : 'white',
textColor:'black',
editable:false,
events: function(start, end, timezone, callback) {
//var period = this.constraints.eventManager.currentPeriod;
var raw = expandHappeningEvents(data.results, start, end);
callback(raw);
}
});
//calendar.refetchEventSources('gsearch');
calendar.prev();
calendar.next();
}