События, не отображаемые при загрузке страницы

#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"}]
  

Надеюсь, это поможет!