我正在通過fullcalendar建立一個日曆。fullcalendar:按'prev'或'next'時顯示ajax事件的問題
我通過外部ajax請求獲取本月的數據。 這裏是數據的主要變量我用它來渲染fullcalendar:
eventsJsonArray - 我使用這個變量來加載所有的一個月
json_backgrundColor的事件 - 我爲了使用這個變量改變相關一個月每一天的背景色
json_iconstring - 我使用這個變量在幾天的時間來顯示一個圖標
MonthDisplayTitle_GetAlternativeMonthDisplay &等 - 我使用這個變量,以更改日曆標題
當我第一次開始我的日曆 - 一切正常。所有的數據和事件都完美地顯示在日曆中。 但是當我按'上一頁'或'下一頁'時,只有'json_backgrundColor'和'json_iconstring'正在更新並顯示在日曆中(我猜是因爲它們在dayRender函數中)
事件和替代標題名稱不會更新並且不會顯示。
這裏是代碼:
<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>
任何人知道什麼是錯我的代碼?以及我如何解決這個問題,所以當我按'下一步'/'預覽'事件和替代標題將得到更新和顯示?
非常感謝!
感謝您的詳細解答!生病看看它是否適合我,讓你儘快知道。 – codingnighter2000
謝謝你。你是一個真正的國王。我改變了我的後端代碼,以便它能用於開始結束日期。我的prev next ajax調用對於事件很好。我現在的問題是dayRender函數在事件函數之前運行。所以當dayRender運行時 - 'json_iconstring'未定義。這會殺死代碼。請參閱http://stackoverflow.com/questions/43583993/fullcalendar-is-there-a-way-to-call-dayrender-only-after-i-load-my-events-via-e – codingnighter2000
謝謝。你真的幫了我!我接受了你的建議。 – codingnighter2000