GWT中使用FullCalendar v6:刷新日历后事件消失问题求助
问题:FullCalendar v6修改事件后周视图事件消失
我正在开发一个基于GWT的应用,使用Domino/UI、Nalukit以及JavaScript插件FullCalendar v6。制作了自定义弹窗用于修改和删除事件,但在验证表单后,日历刷新且周视图中的所有事件消失。
应用运行演示:动图展示了修改事件后,周视图内所有事件消失的现象。
我使用原生函数gotoDate将日历视图切换到事件修改后的日期。
控制器核心代码示例
render方法
@Override public void render() { // Styling related lines omitted FcOptionOverrides mainOptions = new FcOptionOverrides(); mainOptions.locale = "fr"; mainOptions.initialView = "timeGridWeek"; mainOptions.views = new FcViewOptions(); mainOptions.views.timeGridWeek = new FcView(); mainOptions.views.timeGridWeek.weekends = true; mainOptions.views.timeGridWeek.slotMinTime = "07:00:00"; mainOptions.views.timeGridWeek.slotMaxTime = "22:00:00"; mainOptions.eventSources = new FcEventSources(); mainOptions.eventSources.events = this.getController()::onEventNeedMain; mainOptions.datesSet = this::onDatesSet; mainOptions.eventDidMount = this::onEventDidMount; mainOptions.dateClick = this::onBigCalendarDateClick; mainCalendar = new FcCalendar(mainAgendaContainer, mainOptions); FcOptionOverrides smallOptions = new FcOptionOverrides(); smallOptions.locale = "fr"; smallOptions.initialView = "dayGridMonth"; smallOptions.height = "330px"; smallOptions.aspectRatio = 1.0f; smallOptions.eventSources = new FcEventSources(); smallOptions.eventSources.events = this.getController()::onEventNeedSmall; smallOptions.dateClick = this::onSmallCalendarDateClick; smallCalendar = new FcCalendar(smallAgendaContainer, smallOptions); // radio button for displaying week-ends RayflexRadio displayWeekendRadio = new RayflexRadio("weekends", "Week-ends", "Afficher", "Masquer"); displayWeekendRadio.style("position:absolute; top:18px; right:230px;"); displayWeekendRadio.addChangeHandler(event -> { if (displayWeekendRadio.getValue()) { DominoElement.of(mainAgendaContainer).removeCss(RxResource.INSTANCE.gss().calendar_main_no_weekends()); DominoElement.of(mainAgendaContainer).css(RxResource.INSTANCE.gss().calendar_main()); } else { DominoElement.of(mainAgendaContainer).removeCss(RxResource.INSTANCE.gss().calendar_main()); DominoElement.of(mainAgendaContainer).css(RxResource.INSTANCE.gss().calendar_main_no_weekends()); } displayWeekEnds = displayWeekendRadio.getValue(); refreshCalendar(); }); displayWeekendRadio.setValue(displayWeekEnds); card.getBody().appendChild(displayWeekendRadio.element()); initElement(card.element()); }
refreshCalendar方法
@Override public void refreshCalendar() { if (lastModifiedEvent != null) { Date beginDate = lastModifiedEvent.getBeginDate(); JsDate jsDate = new JsDate(1900 + beginDate.getYear(), beginDate.getMonth(), beginDate.getDate()); mainCalendar.gotoDate(jsDate); smallCalendar.gotoDate(jsDate); } mainCalendar.refetchEvents(); }
FullCalendar JS函数包装类
package com.alara.rayflex.ui.client.calendar; import elemental2.core.JsDate; import elemental2.dom.Element; import jsinterop.annotations.JsType; @JsType(isNative = true, namespace = "FullCalendar", name="Calendar") public class FcCalendar { public FcCalendar(Element root) {} public FcCalendar(Element root, FcOptionOverrides optionOverrides) {} public native void render(); public native void updateSize(); public native void gotoDate(JsDate start); public native JsDate getDate(); public native void setOption(String name, String value); public native void setOption(String name, int value); public native void select(JsDate date); public native void refetchEvents(); public native void addEventSource(FcOnEventNeed needEvent); public native void changeView(String viewName, JsDate dateOrRange); }
已尝试的解决方案
- 结合使用原生JavaScript函数
refetchEvents和gotoDate,问题依旧 - 尝试用
addEventSource恢复事件,未成功
期望结果
重新渲染日历,显示被修改事件所在周的所有事件。
内容的提问来源于stack exchange,提问作者Lowick
相关产品推荐
相关产品推荐

