Я использую средство выбора даты JQuery и показываю его пользователю с отключенными днями. Некоторые пользователи на моем сайте могут пометить некоторые дни в программе как «доступные», так сказать, свое рабочее время. Их доступность должна быть отражена в календаре другим пользователям.
Я искал в Интернете это, и кажется, что для этого нужно использовать событие beforeShowDay
, что я и делаю. Короче говоря, когда загружается средство выбора даты, я звоню на сервер, анализирую результат json (список дат), помещаю его в массив, который читается как beforeShowDay
, и здесь я проверяю, находится ли день в массив.
Проблема возникает, когда я меняю месяц. В onChangeMonthYear
я делаю еще один звонок на сервер и извлекаю доступное количество на этот новый месяц. Однако, кажется, что beforeShowDay
называется до этого события, что означает, что еще нет загруженных доступных мест, и календарь ничего не показывает. Вот некоторый код:
var dates = [];
$(document).ready(function() {
var today = new Date();
$.post("/AgendaApi/Day/" + today , null, function(json) {
$.each(json, function(index, result) {
dates.push(result.AvailableDate);
});
}, "json");
});
$(document).ready(function() {
$('#date').datepicker({
minDate: new Date(),
dateFormat: 'dd-mm-yy',
onChangeMonthYear: function(year, month, thisCalendar) {
$.post("/AgendaApi/Day/01-" + month + "-" + year, null, function(json) {
$.each(json, function(index, result) {
dates.push(result.AvailableDate);
});
}, "json");
},
beforeShowDay: function(date) {
if ($.inArray(date, dates) > -1) {
return [true, ''];
}
return [false, ''];
}
});
});
В приведенном выше коде я пропустил какой-то разбор специфичных для культуры дат и все, но вы поняли общую идею. Как я могу решить это? Потому что я хочу, чтобы, если пользователь сменил месяц, я сначала выбрал все доступные дни для этого месяца, а , а затем календарь «нарисован». А не наоборот. Я использую asp.net MVC, но это не имеет большого значения. Большое спасибо!