如何动态更改calendar.eventRender函数以将所有事件的标题更改为extendedProp

时间:2019-05-10 16:50:09

标签: fullcalendar

TLDR;想要使用自定义按钮定义一个按钮,单击该按钮将更新设置event.setProp(title,extendedProps.avres)的所有事件。

长版: 我正在尝试通过更改eventRender函数以更新event.title(从而更改该事件应显示的内容),将所有事件的标题更改为extendedProps.avres。我已经确定需要设置事件的标题属性来更改显示的标题,但是在尝试动态更改eventRender函数时,我大吃一惊。这是我尝试过的当前无提示失败的代码。

df = pd.concat([df] * 1000, ignore_index=True)

%timeit df.assign(**dict(zip('gh', df.col.str)))
%timeit df.assign(**dict(zip('gh', zip(*df.col))))
%timeit df.join(pd.DataFrame([*df.col], df.index, [*'gh']))

11.4 ms ± 1.53 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.1 ms ± 41.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.33 ms ± 35.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

但是单击创建的按钮AV Resources不会执行任何操作。如果我导致要更新的事件,显示的事件标题将保持不变。.如何动态更新calendar.eventRender函数?

1 个答案:

答案 0 :(得分:0)

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个事件,在15分钟后仍在搅动。以这种方式编写,重新渲染事件需要15-45秒,但确实如此工作,我可以看一下不同的领域...我的项目是编写一个用于组织小型风扇运行(非盈利)惯例的编程事件的工具...这使我可以安排事件,然后选择AV视图进行查找需要AV硬件的事件放置在没有AV资源的房间中..最终,它使我可以按名称查看参与者的列表,但这更加复杂,因为Event Panelists字段是参与者ID而不是名称的数组。