You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:47:00