Как динамически изменить функцию calendar.eventRender, чтобы изменить заголовок всех событий на extendedProp - PullRequest
1 голос
/ 10 мая 2019

TLDR; Хотите использовать пользовательские кнопки для определения кнопки, которая при нажатии обновит все события, задавая параметр event.setProp (title, extendedProps.avres).

Длинная версия: Я пытаюсь изменить заголовки всех событий на extendedProps.avres, изменив функцию eventRender для обновления event.title (таким образом изменив то, что должно отображаться для события). Я определил, что мне нужно установить опору заголовка события, чтобы изменить отображаемый заголовок, но я врезаюсь в стену при попытке динамически изменить функцию eventRender. Вот код, который я пробовал, который в настоящее время молча терпит неудачу.

...
//,buttonText:'AV Resources'
function eventtitleToAvres(info){
  if (info.event.title!=info.event.extendedProps.avres{info.event.setProp(title,extendedProps.avres);}
}
...
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
...
,customButtons:{
  eventtitles:{text:'Titles',click:function(calendar){calendar.eventRender .= eventtitleToDbTitle;}}
  ,eventavres:{text:'AV Resources',click:function(calendar){calendar.eventRender = eventtitleToAvres;}}
  ,eventparticipants:{text:'Participants',click:function(calendar){calendar.eventRender = eventtitleToParticipants;}}
            }
...

но нажатие на созданную кнопку AV Resources ничего не дает. Отображаемые заголовки событий остаются без изменений. Событие, если я заставляю событие обновляться. Как я могу динамически обновить функцию calendar.eventRender?

1 Ответ

0 голосов
/ 11 мая 2019

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

<script>
    ...
    var eventTextField='dbtext';

    document.addEventListener('DOMContentLoaded', function() {
        var calendarEl = document.getElementById('calendar');
        var calendar = new FullCalendar.Calendar(calendarEl, {
       ...
        ,customButtons:{
                    eventtitles:{text:'Titles',click: eventtitleToDbTitle}
                    ,eventavres:{text:'AV Resources',click: eventtitleToAvres}
                    ,eventparticipants:{text:'Participants',click: eventtitleToParticipants}
            }
    ,header:left:'prev,next',center:'title',right:'eventtitles,eventavres,eventparticipants'} 
    ...
    });
    calendar.render();
    function changeTitleField(value,index,array){
        value.setProp('title',value.extendedProps[eventTextField]);
    }
    function eventtitleToDbTitle(){
        eventTextField='dbtitle';
        currEvents=calendar.getEvents();
        currEvents.forEach(changeTitleField);
    }
    function eventtitleToAvres(){
        eventTextField='avres';
        currEvents=calendar.getEvents();
        currEvents.forEach(changeTitleField);
    }
    function eventtitleToParticipants(){
        eventTextField='panelists';
        currEvents=calendar.getEvents();
        currEvents.forEach(changeTitleField);
    }

});
</script>

Таким образом, используя вышеупомянутое в функции загрузки содержимого документа, вы должны объявить другие функции после объявления нового календаря, иначе это приведет к ошибкам и не будет работать. Попытка использовать eventRender привела к состоянию гонки или просто очень длительной загруженности события, при этом всего за 110 минут все еще продолжалось 110 событий. Записано таким образом, что требуется 15-45 секунд для повторного рендеринга событий, но это действительно так. работать, и я могу посмотреть на различные поля ... Мой проект заключается в написании инструмента для организации событий программирования для небольшого соглашения о прогоне вентилятора (некоммерческой) ... Это позволяет мне упорядочить события, а затем выбрать вид AV для поиска события, нуждающиеся в размещении AV-оборудования в комнатах без AV-ресурсов ... в конечном итоге это позволит мне увидеть список участников по именам, но это более сложно, так как поле панелистов событий представляет собой массив идентификаторов участников, а не имен.

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