fullCalendar
允許您不通過事件數組,而是傳遞一個函數,例如從服務器下載事件或動態生成這些事件。
文檔中的大多數示例都使用HTTP請求來獲取事件數據。但回調函數仍然足夠靈活,可以按照你想要的方式工作。
請看下面的例子中,我只寫了你:
$(document).ready(function() {
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
editable: true,
events: [
// some original fullCalendar examples
{
title: 'All Day Event',
start: new Date(y, m, 1)
},
{
title: 'Long Event',
start: new Date(y, m, d-5),
end: new Date(y, m, d-2)
},
{
id: 999,
title: 'Repeating Event',
start: new Date(y, m, d-3, 16, 0),
allDay: false
}
]
});
// adding a every monday and wednesday events:
$('#calendar').fullCalendar('addEventSource',
function(start, end, callback) {
// When requested, dynamically generate virtual
// events for every monday and wednesday.
var events = [];
for (loop = start.getTime();
loop <= end.getTime();
loop = loop + (24 * 60 * 60 * 1000)) {
var test_date = new Date(loop);
if (test_date.is().monday()) {
// we're in Moday, create the event
events.push({
title: 'I hate mondays - Garfield',
start: test_date
});
}
if (test_date.is().wednesday()) {
// we're in Wednesday, create the Wednesday event
events.push({
title: 'It\'s the middle of the week!',
start: test_date
});
}
} // for loop
// return events generated
callback(events);
}
);
});
上述功能會自動爲每週一和週三兩個日期之間的事件。日期顯示在start
和end
params。這些參數通過fullCallendar
。上述函數生成的事件在第三個參數中通過callback
函數返回到fullCallendar
。
我使用DateJS來測試給定日期是否爲星期一。
UPDATE:如果要混合靜態事件和/或[多個]可重複事件,則可以使用addEventSource。
未來的讀者:現在有更好的方法來做到這一點(3年後),但這仍然是最好的谷歌結果。看看http://stackoverflow.com/questions/15161654/recurring-events-in-fullcalendar – slicedtoad