rerenderEvents / refetchEvents问题

问题描述 投票:8回答:4

我不确定我是否正确使用这个,所以我的问题可能是我的误解而不是错误或更大的问题。

我有一个完整的日历,可以从这样的doc准备就绪(为简洁起见,省略了一些代码)。

   function renderEvents() {
        var date = new Date();
        var d = date.getDate();
        var m = date.getMonth();
        var y = date.getFullYear();
        var technicians = $("div[ID*='ucTechnicians'] :hidden").val();

        var calendar = $('#calendar').fullCalendar({


       ...
            events: "JsonResponse.ashx?technicians=" + technicians,
       ...    
    }

json响应页面成功返回由初始加载时由所选技术人员过滤的事件。在主页面上是一个控件,用于更改用户希望在日历上看到的技术人员。我无法让日历重新渲染并将技术人员参数传递给json reposne文件。

从按钮单击我尝试再次调用renderEvents()。这会在页面上显示重复的日历。我在调用renderEvents()之前尝试过$('#calendar')。('destroy')。这是有效的,但如果我在一个视图以外的默认月视图中它将全部重置并且销毁重建日历似乎需要很多工作才能刷新。

我也试过$('#calendar')。('rerenderEvents')和$('#calendar')。('refetchEvents')。我甚至试图提前重置源$('#calendar')。fullCalendar('addEventSource','JsonResponse.ashx?technicans ='+技术人员)。

在最后一种情况下,我能够在调试中观察json响应并获取filter参数并返回由最新参数过滤的结果,但页面上的日历不会刷新新值。

如何使用新参数刷新日历?

提前致谢。

parameters fullcalendar
4个回答
14
投票

在伪,删除旧事件,添加新事件源,然后重新获取事件(从唯一的源,现在是新源):

  • 这是未经测试的,但请尝试删除旧事件:

$('#calendar').fullCalendar('removeEvents')

  • 然后添加新的事件源(根据文档,这应该获取事件并在屏幕上显示它们,但它似乎不起作用,所以请使用下一个命令,如刷新):

$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians)


编辑:而不是:

然后重新获取并呈现新事件:

$('#calendar').fullCalendar( 'refetchEvents' )

要么:

  • 如上所述,使用以下命令,运行addEventSource会获取新事件,因此这应该呈现新获取的事件:

$('#calendar').fullCalendar('rerenderEvents')


9
投票

谢谢您的帮助!

以下是根据Scoobler的建议工作的步骤:(1)removeEvents。 (2)addEventSource,(3)rerenderEvents。

$('#calendar').fullCalendar('removeEvents');
$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians);
$('#calendar').fullCalendar('rerenderEvents');

2
投票
$('#calendar').fullCalendar('removeEvents');
$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians);
$('#calendar').fullCalendar('rerenderEvents');

上面的解决方案有效,但每次运行它都会添加一个eventSource。

因此,当您需要运行$('#calendar').fullCalendar('refetchEvents');时,您将获得来自所有来源的事件,以及来自所有先前来源的许多共和事件和事件。

对我有用的解决方案是:

$('#calendar').fullCalendar('removeEventSource', 'JsonResponse.ashx?technicans=' + technicians);
technicians = new_technicians_value;
$('#calendar').fullCalendar('addEventSource', 'JsonResponse.ashx?technicans=' + technicians);

并且不需要“rerenderEvents”或“refetchEvents”。

“addEventSource”事件将立即从新源获取。

之后,“refetchEvents”将在需要时工作。


0
投票
newEvents = [...]

 $('#calendar').fullCalendar('removeEvents');
 $('#calendar').fullCalendar( 'addEventSource', newEvents);

不需要'rerenderEvents',就像魅力一样!

© www.soinside.com 2019 - 2024. All rights reserved.