I am building a calendar via fullcalendar.
I get my data for the month via external ajax request. here are the main variables of data i use to render the fullcalendar:
eventsJsonArray - i use this variable to load all of the events of the month
json_backgrundColor - i use this variable in order to change the background color of each day of the relevant month
json_iconstring - i use this variable to show an icon in some days
MonthDisplayTitle_GetAlternativeMonthDisplay & etc - i use this variables in order to change the calendar title
when i first start my calendar - everything is ok. all of the data and events are being displayed in the calendar perfectly.
but when i press 'prev' or 'next', only the 'json_backgrundColor' and the 'json_iconstring' are being updated and displayed in the calendar.(i guess because they are in the dayRender Function)
the events and the alternative title names do not update and are not being displayed.
here is the code:
<script>
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
m = m + 1;
var y = date.getFullYear();
var ajaxData;
var eventsJsonArray;
var json_backgrundColor;
var json_iconstring;
var DefaulteDateForFullCalendarISO8601;
var MonthDisplayTitle_GetAlternativeMonthDisplay;
var MonthDisplayTitle_GetAlternativeYearDisplay;
var MonthDisplayTitle_GetGregorianYear;
getMonthData(m, y);
function getMonthData(m, y) {
//getting Month data
$.ajax({
url: '$getMonthDataUrl',
type: 'GET',
data: {
gregorianMonth: m,
gregorianYear: y
},
error: function () {
alert('there was an error while fetching events!');
},
success: function (data) {
ajaxData = data;
eventsJsonArray = ajaxData['all_The_Events_For_The_Month'];
json_iconstring = ajaxData['iconString'];
json_backgrundColor = ajaxData['Big_Calendar_cell_background_color'];
MonthDisplayTitle_GetAlternativeMonthDisplay = ajaxData['fullMonthDetails']['MonthEngDisplay'];
MonthDisplayTitle_GetAlternativeYearDisplay = ajaxData['fullMonthDetails']['YearDisplay'];
MonthDisplayTitle_GetGregorianYear = ajaxData['fullMonthDetails']['GregorianYear'];
DefaulteDateForFullCalendarISO8601 = ajaxData['fullMonthDetails']['DefaulteDateForFullCalendarISO8601'];
alert('ajax works! nicee!');
//console.log(ajaxData);
//console.log(DefaulteDateForFullCalendarISO8601);
}
});
}
//oridinal place for getmonthdate
alert('Hello! 1!');
$(document).ready(function () {
console.log(eventsJsonArray);
$('#calendar').fullCalendar({
header: {
left: 'prev',
center: 'title',
right: 'next'
},
events: eventsJsonArray,
fixedWeekCount: false,
monthNamesShort: ['January ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'February ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'March ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'April ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'May ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'June ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'July ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'August ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'September ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'October ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'November ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay, 'December ' + MonthDisplayTitle_GetGregorianYear + ' : ' + MonthDisplayTitle_GetAlternativeMonthDisplay + ' ' + MonthDisplayTitle_GetAlternativeYearDisplay],
titleFormat: 'MMM',
dayRender: function (date, cell) {
var cellDate = date.format('D');
if (!cell.hasClass('fc-other-month')) {
//if this if is true that means that the day belongs to the current relevant month (and not to the prev \ next month)
cell.css('background-color', json_backgrundColor[cellDate]);
//from here: cheking which icons to show
if (json_iconstring[cellDate].includes('HAV')) {
cell.prepend('<img src=\' /havdala2.png \'>');
}
//until here:: cheking which icons to show
} else {
//this days belongs to the prev \ next months. so we give them opacity)
cell.css('background-color', '#ffffff');
}
}
})
});
alert('Hello!2 !');
$('body').on('click', 'button.fc-prev-button', function () {
//do something
alert('whatupppp!prev !');
//console.log(m,y);
if (m === 1) {
m = 12;
y = y - 1;
}
else {
m = m - 1;
}
getMonthData(m, y);
console.log(eventsJsonArray);
});
$('body').on('click', 'button.fc-next-button', function () {
//do something
alert('whatupppp!next !');
//console.log(m,y);
if (m === 12) {
m = 1;
y = y + 1;
}
else {
m = m + 1;
}
getMonthData(m, y);
console.log(eventsJsonArray);
});
</script>
anybody knows what is wrong with my code? and how can i fix it so when i'll press 'next' / 'prev' the events and alternative titles will get updated and displayed?
many thanks!!