#php #json #fullcalendar
#php #json #полный календарь
Вопрос:
Я использую Fullcalendar, вызываемый через json, и происходит что-то действительно странное, и это меня убивает! Не могу найти обходной путь для этого.
У меня есть мой календарь под вкладкой. Когда я нажимаю на эту вкладку, отображается сетка календаря, но без событий. Если я перейду к календарю на следующий месяц, а затем вернусь к предыдущему месяцу, все события будут отображаться правильно!
Если я перейду на другую страницу, а затем вернусь на страницу календаря, произойдет то же самое. Для загрузки событий необходимо перейти к следующему и предыдущему.
Вот как я вызываю календарь:
$(document).ready(function() {
$('#calendar').fullCalendar({
editable: false,
events: "../events_calendar.php",
loading: function(bool) {
if (bool) $('#loading').show();
else $('#loading').hide();
}
}); });
Есть идеи??
Спасибо.
Комментарии:
1. Вы пробовали отладку через Firebug или что-то подобное? В руководстве по полному календарю указано, что функция events вызывается, когда календарю требуются новые данные, которые относятся к предыдущему / следующему месяцу, и при изменении представления. Возможно ли, что, поскольку календарь скрыт до тех пор, пока пользователь не нажмет на вкладку, он неправильно обновлен или инициализирован?
2. На самом деле, я только что заметил, используя Firebug, что данные календаря есть, просто не видны! Теперь это еще более странно. Я попытался переместить свой CSS в верхнюю часть страницы, а мой JS — в нижнюю, как кто-то предложил в другой теме, но безуспешно.
3. У меня здесь то же самое! используя firebug, события принимаются, но не отображаются. Однако повторный запуск не помогает!
Ответ №1:
Может возникнуть проблема со скрытием календаря при загрузке страницы.
Итак, вы можете попробовать повторно отобразить событие http://arshaw.com/fullcalendar/docs/event_rendering/rerenderEvents /
.fullCalendar( 'rerenderEvents' )
или
Чтобы убедиться, что события в порядке, вы должны подключить повторную выборкуhttp://arshaw.com/fullcalendar/docs/event_data/refetchEvents /
.fullCalendar( 'refetchEvents' )
Оба этих события должны вызываться, когда календарь показывает и готов, например.. не раньше, так как у него могла возникнуть та же проблема.
и
Я думаю, что с этим где-то уже была проблема, но ее можно было решить в новейшей версии. Но я не могу найти это сейчас. Попробуйте и найдите ошибки в службе поддержки
http://code.google.com/p/fullcalendar/issues/list?can=1amp;q =
Кроме этого вам придется попробовать настроить способ загрузки календаря и т.д…
Ответ №2:
Ваша проблема может быть связана с тем, что FullCalendar выполняет асинхронные запросы (что означает, что календарь может загрузиться ДО того, как данные будут возвращены). Итак, измените его, чтобы выполнять синхронные запросы.
Вместо этого
$(document).ready(function() {
$('#calendar').fullCalendar({
editable: false,
events: "../events_calendar.php",
loading: function(bool) {
if (bool) $('#loading').show();
else $('#loading').hide();
}
}); });
Используйте что-то вроде этого:
$(document).ready(function() {
$('#calendar').fullCalendar({
editable: false,
eventSources: [
{
url: '../events_calendar.php',
async: false // No longer asynchronous
}
],
loading: function(bool) {
if (bool) $('#loading').show();
else $('#loading').hide();
}
}); });
Сравните с примером, найденным на http://arshaw.com/fullcalendar/docs/event_data/events_json_feed /
Ответ №3:
У меня была та же проблема (см. Мои комментарии к исходному сообщению), и я выяснил почему. мои события в формате json были такими и отлично перерисовывались, если не вызывались как ajax (т. Е. json — это значение параметров ‘events’):
[{id:2317,title:"test",start:"2011-06-08 09:00:00.0",end:"2011-06-08 11:00:00.0",allDay:false,url:"log/show/2317",backgroundColor: 'green'}]
Однако это не работает при вызове через ajaxed. чтобы это заработало, поместите имена свойств вашего json в двойные кавычки «…». Будьте осторожны и не используйте одинарные кавычки, это тоже не сработает. Мой вложенный json становится:
[{"id":2317,"title":"test","start":"2011-06-08 09:00:00.0","end":"2011-06-08 11:00:00.0","allDay":false,"url":"log/show/2317","backgroundColor": "green"}]
Надеюсь, это поможет!