проблема rerenderEvents / refetchEvents - PullRequest
8 голосов
/ 10 января 2011

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

У меня есть полный календарь, который запускается из документа, готового вот так (некоторыекод оставлен для краткости).

   function renderEvents() {
        var date = new Date();
        var d = date.getDate();
        var m = date.getMonth();
        var y = date.getFullYear();
        var technicians = $("div[ID*='ucTechnicians'] :hidden").val();

        var calendar = $('#calendar').fullCalendar({


       ...
            events: "JsonResponse.ashx?technicians=" + technicians,
       ...    
    }

Страница ответов json успешно возвращает события, отфильтрованные выбранным техническим специалистом при начальной загрузке.На главной странице находится элемент управления для смены техников, которых пользователь хочет видеть в календаре.Я не могу получить календарь для повторного рендеринга и передать параметр техников в файл json reposne.

При нажатии кнопки я снова попытался вызвать renderEvents ().Это помещает дубликат календаря на страницу.Я пробовал $ ('# calendar'). ('Destroy') перед вызовом renderEvents ().Это работает, но если я нахожусь в представлении, отличном от представления месяца по умолчанию, оно всегда сбрасывается, и восстановление календаря кажется мне трудоемким.

Я также пробовал $ ('# calendar'). ('rerenderEvents') и $ ('# calendar'). ('refetchEvents').Я даже пытался сбросить источник $ ('# calendar'). FullCalendar ('addEventSource', 'JsonResponse.ashx? Technicans =' + technicians) заранее.

В последнем случае я могучтобы посмотреть ответ json в режиме отладки, он обнаруживает параметр фильтра и возвращает результаты, отфильтрованные по последним параметрам, но календарь на странице не обновляется новыми значениями.

Как сделать обновление календаряс новыми параметрами?

Заранее спасибо.

Ответы [ 4 ]

14 голосов
/ 10 января 2011

В псевдо, удалите старые события, добавьте новый источник событий, затем повторно выберите события (из единственного источника, который теперь является новым источником):

  • Это не проверено, но попробуйте удалитьстарые события:

$ ('# calendar'). fullCalendar ('removeEvents')

  • Затем добавьте новый источник событий (Согласно документации, это должно извлечь события и отобразить их на экране, но это, кажется, не работает, поэтому следуйте за ним со следующей командой, которая похожа на обновление) :

$ ('# calendar'). FullCalendar ('addEventSource', 'JsonResponse.ashx? Technicans =' + technicians)


EDIT: Вместо:

Затем повторно выполните и отрендерируйте новые события:

$ ('# calendar'). FullCalendar ('refetchEvents')

ИЛИ:

  • Используйте следующее, как вы упомянули, запуск addEventSource извлекает новые события, поэтомудолжен гдобавить только что извлеченные события:

$ ('# calendar'). fullCalendar ('rerenderEvents')

9 голосов
/ 10 января 2011

Спасибо за помощь!

Вот что сработало, основываясь на предложениях Скублера, следующие шаги: (1) удалить события.(2) addEventSource, (3) rerenderEvents.

$('#calendar').fullCalendar('removeEvents');
$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians);
$('#calendar').fullCalendar('rerenderEvents');
2 голосов
/ 01 апреля 2016
$('#calendar').fullCalendar('removeEvents');
$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians);
$('#calendar').fullCalendar('rerenderEvents');

Приведенное выше решение работает, но каждый раз, когда вы его запускаете, оно добавляет источник событий.

Поэтому, когда вам нужно запустить $('#calendar').fullCalendar('refetchEvents');, вы получите события из всех источников, так много дублирующих событийи события из всех предыдущих источников.

Решение, которое работает для меня хорошо, это:

$('#calendar').fullCalendar('removeEventSource', 'JsonResponse.ashx?technicans=' + technicians);
technicians = new_technicians_value;
$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians);

И нет необходимости в «rerenderEvents» или «refetchEvents».

После того, как события «addEventSource» будут немедленно получены из нового источника.

После этого «refetchEvents» будет работать, как положено, когда это необходимо.

0 голосов
/ 02 апреля 2019
newEvents = [...]

 $('#calendar').fullCalendar('removeEvents');
 $('#calendar').fullCalendar( 'addEventSource', newEvents);

нет необходимости 'rerenderEvents' и работает как шарм!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...