fullCalendar jQuery, powtarzać w każdy poniedziałek?
Normalnie jest to wydarzenie w kalendarzu:
{
title: 'Test',
start: '2012-06-08',
end: '2012-06-08',
url: 'test/test'
},
Działa dobrze. Chociaż jak Mogę zrobić 1 wydarzenie, które pokazuje się w każdy poniedziałek w kalendarzu? Lub każdy wtorek i tak dalej zależy od tego, który dzień tygodnia/numer wprowadzić? Co to za param, jeśli taki istnieje?
Jeśli nie istnieje, Czy Mogę w jakiś sposób zmodyfikować i dodać funkcję do tego celu? Możesz więc wprowadzić param jak repeatEveryWeekDay: 2( czyli poniedziałek), wtedy we wszystkich przyszłych poniedziałkach dane będą tam wyświetlane.
I próbowałem szukać http://arshaw.com/fullcalendar/docs/event_data/Event_Object / ale nic nie mogę znaleźć.
4 answers
fullCalendar
pozwala na to, że zamiast przekazywania tablicy zdarzeń, można przekazać funkcję, która na przykład pobiera zdarzenia z serwera lub dynamicznie generuje te zdarzenia.
Większość przykładów w dokumentacji używa żądań HTTP do pobierania danych zdarzeń. Ale funkcja zwrotna jest nadal wystarczająco elastyczna, aby działała tak, jak chcesz.
Spójrz na poniższy przykład, który właśnie dla Ciebie napisałem:
$(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 );
}
);
});
Powyższa funkcja automatycznie generuje zdarzenie dla w każdy poniedziałek i środę między dwoma datami. Daty podane są w paramach start
i end
. Paramy te przekazywane są przez fullCallendar
. Zdarzenia generowane przez powyższą funkcję są zwracane do fullCallendar
poprzez funkcję callback
w trzecim param.
Używam DateJS aby sprawdzić, czy dana Data jest poniedziałkiem.
UPDATE: jeśli chcesz mieszać statyczne zdarzenia i / lub [więcej niż jedno] powtarzalne Zdarzenie, możesz użyć addEventSource.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-09 04:25:05
Mała aktualizacja do posta Christophera Ramíreza.
Używając fullCalendar w v2.2.3
i momentjs w v2.8.4
musisz zmienić kilka linijek w powyższym fragmencie, aby to działało:
Pierwszy:
function(start, end, callback) {}
Do
function(start, end, status, callback) {}
Ponieważ trzeci parametr jest logiczny, a czwarty jest funkcją wywołania zwrotnego
Wtedy:
for (loop = start.getTime();
loop <= end.getTime();
...
Do
for (loop = start._d.getTime();
loop <= end._d.getTime();
Ponieważ obiekty start i end przekazywane do funkcji nie są obiektami daty i wywołania .getTime() na nich skończy się w ' Undefined nie jest błędem funkcji.
I to wszystko! Poprawki te sprawiły, że działa to dla mnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-08 09:33:18
To pole ID obiektu event określa powtarzalność tego zdarzenia. Użyj tego samego identyfikatora dla wszystkich powtarzających się Wydarzeń w danym dniu tygodnia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-17 15:59:41
Najlepszym sposobem rozwiązania powtarzającego się zdarzenia jest skonfigurowanie wywołania JSON do Twojego języka backend (używam Django / Python).
Więc w opcjach kalendarza miałbym:
Events: {url: '/ event-data', cache: false},
Następnie w moim backendzie korzystam z parametrów, które są wysyłane dla bieżącego wyświetlanego kalendarza zmienne "start" I " end " URL pobierają. Tj.:
Hxxp: / / example. com: 8000 / event-data? start=2014-09-28&end=2014-11-09 & _=1413553318353
Żądanie Get zostanie wysłane z opcji events, następnie buduję zdarzenia z bazy danych / pliku źródłowego, który zawiera listę powtarzających się zdarzeń wraz ze zwykłymi zdarzeniami kalendarza i odsyłam tylko listę zdarzeń występujących w tym zakresie dat na liście JSON.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-10 08:58:10