当前位置: 首页 > 知识库问答 >
问题:

在呈现后更改Fullcalendar事件源

扶誉
2023-03-14

我一直在使用FullCalendar V1.5.3替换MS SharePoint。

我正在尝试重新呈现日历事件的源。例如,在默认情况下,当页面加载时,这是ajax调用

/Calendar/Events/FeedTasks?开始=1338094800&结束=1341118800&_=1339103302326

我们使用一个选择框将事件源更改为只显示任务(从不同的表中提取),因此在选择之后,ajax调用更改为:

/日历/事件/FeedEvents?开始=1338094800&结束=1341118800&_=1339103302326

这管用。但是,它不只是更改当前的日历事件源,而是创建一个重复的日历表(在当前的日历表之上创建一个新的divclass=“fc-content”div)。

这是我目前所掌握的:

$("#TaskSelector").change(onSelectChange);   
    function onSelectChange(){
        $('#calendar').fullCalendar({
            events: '/calendar/events/' + $('#TaskSelector').val()
        });
    }
});

我错过了什么?

共有1个答案

姬高扬
2023-03-14

有一些名为RemoveEventSource()AddEventSource()的方法允许您调整源列表。我有一个类似的情况,我需要在month视图中隐藏一个源,但在其他上下文中显示它,我发现在eventSources数组中删除和重新添加元素是实现这一点的最干净的方法。

    var fcSources = {
        courses: {
                    url: base+'accessfm/calendar/courses',
                    type: 'GET',
                    cache: true,
                    error: function() { alert('something broke with courses...'); },
                    color: 'purple',
                    textColor: 'white',
                    className: 'course'
                },
        requests: {
                    url: base+'accessfm/calendar/requests',
                    type: 'GET',
                    cache: true,
                    error: function() { alert('something broke with requests...'); },
                    textColor: 'white',
                    className: 'requests'
                },
        loads:  {
                    url: base+'accessfm/calendar/loads',
                    type: 'GET',
                    cache: true,
                    error: function() { alert('something broke with loads...'); },
                    color: 'blue',
                    textColor: 'white',
                    className: 'loads'
                }
    };
<snip>
    $('#fullcalendar').fullCalendar({
        header: {
                    left: 'title',
                    center: 'agendaDay,agendaWeek,month',
                    right: 'today prev,next'
                },
        defaultView: 'agendaWeek',
        firstDay: 1,
        theme: true,
        eventSources: [ fcSources.courses, fcSources.requests, fcSources.loads ],
        viewDisplay: function(view) {
            if (lastView != view.name){ // view has been changed, tweak settings
                if (view.name == 'month'){
                    $('#fullcalendar').fullCalendar( 'removeEventSource', fcSources.loads )
                                      .fullCalendar( 'refetchEvents' );;
                }
                if (view.name != 'month' && lastView == 'month'){
                    $('#fullcalendar').fullCalendar( 'addEventSource', fcSources.loads );
                }
            }
            lastView = view.name;
        }
    });

不要只是复制/粘贴这段代码,因为它并不能完全解决您的问题。但你应该能从中吸取一些点子。调整fcsources哈希以适应您的源,然后仅用其中一个源实例化您的fullCalendar对象,并使用RemoveEventSourceAddeVentSource方法交换它。

还请注意refetchevents()的使用-这是确保正确重新呈现显示所必需的。

 类似资料:
  • 问题内容: 我试图让fullCalendar反映通过AJAX对数据库所做的更改。问题是在成功进行AJAX调用后,它不会更新屏幕上的日历。 我使用了错误的方法?无需重新加载整个页面的最佳方法是什么?感谢您的输入! 问题答案: 有几种方法。一些不太优雅。 1.如果您使用FullCalendar捕获json事件: 做就是了: 如果希望外部方法获取事件,则可以执行。不优雅但是可以用

  • 我的目标是有两个不同的FullCalendar元素保持同步。我不做任何网络调用,在这一点上只是客户端数组。 当我添加一个事件时(比如通过点击或者在它构建之后),日历实际上不会像文档所说的那样重新呈现。 我还尝试使用“renderEvents”和“renderEvent”风格,但这似乎没有必要,因为“updateEvents”将/应该更新这些事件的呈现。我还遇到了一个问题,日历列表版本上的“rend

  • 问题内容: 我使用fullcalendar v4来显示事件。事件在负载中正常显示,但是我需要使用多个复选框添加过滤器,并在使用ajax的onchange复选框之后刷新全日历事件。 更改后,我得到了新的对象事件,但我需要刷新我尝试使用的fullcalendar,但无法正常工作 全日历脚本 阿贾克斯脚本 更改时复选框功能 问题答案: 您没有确切解释代码出了什么问题,但是我可以看到,当您从AJAX调用获

  • 问题内容: 我正在使用fullcalendar,如何从同一服务器端,多个URL获取更多事件?最初的方法有效,我只想在事件到达时添加其他事件(ajax)。 问题答案: 您可以使用Ajax获取数据,然后动态添加新源

  • 问题内容: 我有一个包含三个部分的搜索页面。浏览主题组件列出了可供选择的主题。浏览文章组件基于主题ID列出所有文章,如果没有主题ID,则加载所有文章。home组件包含browsertopics和browserarticles组件,并根据所单击的主题更改其状态。 我需要的是,我希望BrowseTopics组件在父状态更改时停止重新呈现。我尝试使用shouldComponentUpdate()(返回f

  • 我不知道为什么这不起作用 单击该按钮显然会更改道具,但旧的仍在输入中!那么什么给了?我做错了什么?这是虫子吗?有变通办法吗?