rerenderEvents / refetchEvents问题

时间:2011-01-10 01:41:54

标签: parameters fullcalendar

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

我有一个fullcalendar,可以像这样从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参数并返回由最新参数过滤的结果,但页面上的日历不会刷新新值。

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

提前致谢。

5 个答案:

答案 0 :(得分:14)

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

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

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

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

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


编辑: 而不是:

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

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

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

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

答案 1 :(得分:9)

感谢您的帮助!

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

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

答案 2 :(得分: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"将在需要时工作。

答案 3 :(得分:0)

newEvents = [...]

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

无需'rerenderEvents',就像一个魅力!

答案 4 :(得分:0)

使用fulcalendar 4.x,我正在使用类似这样的东西:

照常初始化日历:

 var calendar = $('#calendar').fullCalendar({
       ...
        events: "JsonResponse.ashx?technicians=" + technicians,
       ... 
 });

,然后在需要重绘事件时:

var eventSources = calendar.getEventSources();
for(var i in eventSources)
{
    var evres=eventSources[i];
    evres.refetch();
}
calendar.render();