JQuery Fullcalendar - 在添加新数据源

时间:2015-11-26 15:22:06

标签: javascript jquery fullcalendar

我在使用Fullcalendar时遇到了困难。基本上我必须使用ajax逐月获取事件,否则渲染日历需要太长时间,因为事件非常复杂。我可以获取事件并将它们添加到日历中没有问题,但问题是,当您添加新数据源时,所有事件都会正常呈现,但dayRender事件永远不会被触发,因此我的自定义背景和qtips不应用,因为它们应该因为他们只是在dayRender事件中被应用。

有一个选项可以破坏然后渲染日历(重绘日历)以触发dayRender事件,但出于某种原因,如果我正在做:

$('#calendar').fullCalendar('destroy');
$('#calendar').fullCalendar('render');

日历正在被破坏,但从未重新创建 - >没有任何反应(也没有警告或错误信息)。

在以与$('#calendar').fullCalendar( 'addEventSource', myevents );类似的方式初始化日历后,有没有办法调用dayRender事件?

或许您可以提供一些替代解决方案?

答案:

好的,经过几个小时尝试不同的事情后,我相信我找到了一个解决方法:

  1. 当您第一次初始化日历时,您将创建一个未来事件数组并向其添加1个虚拟记录(否则它将不会创建日历)。
  2. 使用此阵列初始化日历。
  3. 创建ajax调用以添加日历的新数据源,并将事件推送到您在第一步中创建的数组中。
  4. 将事件推入主数组后,执行以下代码:
  5. $('#calendar').fullCalendar('prev'); $('#calendar').fullCalendar('next');

    由于某种原因会调用dayRender事件。

2 个答案:

答案 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();
}