Задержка JSON Feed для полного календаря jQuery - PullRequest
4 голосов
/ 24 апреля 2011

Я заметил, что если вы настроите источник событий (т.е. будете выполнять запросы AJAX на сервер) и начнете быстро щелкать в следующем месяце, он будет запускать запрос на каждый месяц. Поэтому, если я нажму быстро, чтобы получить 5 раз, 5 запросов сработают.

Как я могу сделать так, чтобы он срабатывал только после того, как пользователь перестал щелкать. Я считаю, что такая трата ресурсов и может привести к ошибкам.

1 Ответ

0 голосов
/ 25 апреля 2011

Вы абсолютно правы по этому поводу, и я уже подал ошибку команде разработчиков по этому поводу.

http://code.google.com/p/fullcalendar/issues/detail?id=920&can=1&sort=-id&colspec=ID%20Type%20Status%20Milestone%20Summary%20Stars

Единственный способ сделать это сейчас - использовать событие viewDisaply.

http://arshaw.com/fullcalendar/docs/display/viewDisplay/

А внутри этого события viewDisapy вызвать событие загрузки

http://arshaw.com/fullcalendar/docs/event_data/loading/

Единственный способ, которым я могу думать сейчас, это сделать javascript setTimeout

var t=setTimeout( FUNCTION , TIME IN MS);

внутри проверки тайм-аута isLoading, и если true, тогда снова установите тайм-аут.

Или просто использовать setTimeout внутри функции viewDisplay до 500мс / 1секунда? чтобы создать желаемый эффект задержки, который вы ищете, и по истечении этого времени вы можете добавить нужный источник, используя addEventSource http://arshaw.com/fullcalendar/docs/event_data/addEventSource/

Существует еще одна опция, встроенная в календарь.

http://arshaw.com/fullcalendar/docs/event_data/lazyFetching/

Этот параметр говорит плагину для кэширования всех событий. так что если вы нажмете кнопку «следующий / следующий / предыдущий / предыдущий» Он только дважды вызывает AJAX. Потому что предыдущие два месяца загружены и кэшированы.

isclicking: D не существует, потому что мы не знаем, будет ли пользователь щелкать снова или нет ..: D, поэтому мы должны ожидать этого только путем установки setDelay, если пользователь дважды щелкнет по следующему месяцу в течение 1 секунды.

Так что, если кто-то захочет пойти на 6 месяцев раньше, он быстро нажмет следующие кнопки, и мы можем обнаружить это следующим образом.

//global var

var clicks = 0;
var isClicking = false;

 //jquery on load and calender initialisation.

 loading: function(bool) { if (bool) 
            { 
                    clicks=0; //The source has loaded completely - user stopped clicking
                    }
            else 
            {
            //Still loading 
            }
        },


 viewDisplay: function(view) {
            click += 1; //user has clicked- and this will grow each time he clicks before the ajax finishes.
            if (click > 1) //Yea he is clicking and clicking.. so lets stop calling ajax.
            {
            $('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx' ); //Remove the source so it stops firing on each click
            setTimeout ( $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx' ); , 1000 ); //Add the source again and it will load and fire loading(true) and reset our click counter
            }

            //Handle other view changes like month/week and date changes
            },          
...