У меня есть календарь с некоторыми пользовательскими функциями. Календарь строится один раз, но в некоторых случаях мне нужно обновить настройку минимального и максимального времени.
Чтобы получить точное минимальное / максимальное время, у меня есть функция ajax, возвращение которой показано ниже. {"start":"12:00:00","end":"21:30:00"}
И этот ответ сопровождается этим кодом для обновления календаря.
$('#calendar').fullCalendar('option', 'minTime', minTime);
$('#calendar').fullCalendar('option', 'maxTime', maxTime);
У меня есть данные календаря обновления, которые также вызывают функцию, которая извлекает минимальное / максимальное время.
function updateCalendarData() {
getCalendarDateField();
$('#calendar').fullCalendar('refetchResources');
$('#calendar').fullCalendar('refetchEvents');
// min/maxtime function.
setStudioHours(studioWorkingHours);
}
У меня есть кнопка, при нажатии которой календарь должен обновляться, как показано ниже.
$('#calendar_date').change(function(event , element) {
updateCalendarData();
});
$('#filter_form_submited').click(function(event , element) {
updateCalendarData();
});
jQuery('body').on('click','button.fc-prev-button, button.fc-next-button',function(event) {
setStudioHours(studioWorkingHours);
});
$(document).on('keypress',function(event) {
if(event.which == 13) {
updateCalendarData();
}
});
Я установил refetchResourcesOnNavigate
как true, и вот мой ресурс ифункции обратного вызова событий.
resources: function(callback){
timeInfo = $('#calendar').fullCalendar('getView');
jQuery('input[name="start"], #calendar_date').val(timeInfo.start.format());
jQuery('input[name="end"]').val(timeInfo.end.format());
$.ajax({
url: resourcesCallback,
type: 'GET',
dataType: "json",
data: jQuery('.calendar_filter_form').serialize(),
error: function() {
console.log('Oops! Try again.');
},
success: function(response){
$(".fc-widget-header th > div").popover('hide');
callback(response);
}
});
},
events: {
url: eventsCallback,
method: 'GET',
data: function() {
var fields = jQuery('.calendar_filter_form').serializeArray();
var datas = {};
jQuery.each(fields, function(index, val) {
/* iterate through array or object */
datas[val.name] = val.value;
});
return datas;
},
failure: function() {
alert('there was an error while fetching events!');
},
},
Система работает нормально, без каких-либо ошибок, но проблема в том, что ресурс called 3 times
.
И я уверен, что у меня просто есть ресурсы и путьили операции являются уникальными. Но в моем сетевом журнале это в 3 раза больше, чем связанный путь для ajax-запроса.
Так что не так, я пытался остановить многократный запрос с некоторым значением true / false, но не работал.
Просто я должен упомянуть, что у меня Drupal 8 и v3 полного календаря.
ОБНОВЛЕНО
Я обновил коды и знаю, что я решаю проблему с загрузкойнесколько раз на моих пользовательских кнопках.
function updateCalendarData() {
getCalendarDateField();
$('#calendar').fullCalendar('refetchEvents');
setStudioHours(studioWorkingHours);
}
и только один раз установите время.
var newTimeConfig = {};
newTimeConfig['minTime'] = matchedDayHours.start;
newTimeConfig['maxTime'] = matchedDayHours.end;
$('#calendar').fullCalendar('option', newTimeConfig);
Но, тем не менее, у меня есть проблема с ресурсами обновления в навигации, что если я сделаюего конфигурация false, тогда я получу эту ошибку.
refetchResourcesOnNavigate: false,
jquery.min.js: 2 Uncaught TypeError: Невозможно прочитать свойство 'format' из неопределенного
Проверьте это демо https://codepen.io/nasser-ali-karimi/pen/gOOMMKN