我注意到,如果你设置一个事件源(即你将要做服务器的AJAX请求),并开始快速点击下个月迅速它会触发每个月的请求。所以如果我点击迅速获得5次5请求将会关闭。延迟JSON饲料的jQuery全日历
我该如何做到这一点,只有当用户停止点击时才会触发它。我发现如此浪费资源并可能导致错误。
我注意到,如果你设置一个事件源(即你将要做服务器的AJAX请求),并开始快速点击下个月迅速它会触发每个月的请求。所以如果我点击迅速获得5次5请求将会关闭。延迟JSON饲料的jQuery全日历
我该如何做到这一点,只有当用户停止点击时才会触发它。我发现如此浪费资源并可能导致错误。
你对此绝对正确,我已经向开发团队提出了这方面的错误。
我能想到这样做,现在唯一的办法就是使用viewDisaply事件。
http://arshaw.com/fullcalendar/docs/display/viewDisplay/
这viewDisapy事件中调用加载事件
http://arshaw.com/fullcalendar/docs/event_data/loading/
我现在能想到的唯一办法是待办事项一个javascript的setTimeout
var t=setTimeout(FUNCTION , TIME IN MS);
超时检查内isLoading,如果为true,则再次设置超时。
或者只是在viewDisplay函数中使用setTimeout 500ms/1秒?以创建所需的延迟效果,一旦它超时,您可以使用addEventSource添加所需的源代码。 http://arshaw.com/fullcalendar/docs/event_data/addEventSource/
还有另一种内置于日历中的选项。
http://arshaw.com/fullcalendar/docs/event_data/lazyFetching/
此选项告诉插件来缓存所有事件。所以如果你点击下一个/下一个/上一个/上一个。它只调用一次jax两次。因为前两个月已加载并缓存。
没有这样的事情是因为我们不知道用户是否要再次点击或不是.D:所以我们只需要预测一下,如果用户点击下一个月在1秒内两次。
所以如果有人想要提前6个月,他们会很快按下下一个按钮,我们可以检测到这样的情况。
//global var
var clicks = 0;
var isClicking = false;
//jquery on load and calender initialisation.
loading: function(bool) { if (bool)
{
clicks=0; //The source has loaded completely - user stopped clicking
}
else
{
//Still loading
}
},
viewDisplay: function(view) {
click += 1; //user has clicked- and this will grow each time he clicks before the ajax finishes.
if (click > 1) //Yea he is clicking and clicking.. so lets stop calling ajax.
{
$('#calendar').fullCalendar('removeEventSource', '/diaryFeed.aspx'); //Remove the source so it stops firing on each click
setTimeout ($('#calendar').fullCalendar('addEventSource', '/diaryFeed.aspx'); , 1000); //Add the source again and it will load and fire loading(true) and reset our click counter
}
//Handle other view changes like month/week and date changes
},
你能告诉我这个加载事件如何看起来像超时?我们是否通过超时延迟了Ajax请求?还有一种方法可以监控点击何时停止。就像发生5次点击或类似的事情只使用一次。因为我不确定计时器是否是最好的选择。 – chobo2 2011-04-25 20:57:04
对,我其实注意到你的意思是别的,你的问题。我知道它不合乎逻辑,但试着快速点击月/日/月/日/月/日,看看有什么好处;)任何方式 - 今天我会有一些代码来解决你的和我的问题,因为我需要解决这个问题问题在我的网站 – ppumkin 2011-04-26 08:33:48
你将不得不这样做,以检测用户是否想要提前/延迟几个月。否则,请使用lazyFetching http://arshaw.com/fullcalendar/docs/event_data/lazyFetching/,它会记住已加载的所有数据,并且在缓存的月份内不会请求ajax。我已经添加了一些代码到原来的答案 – ppumkin 2011-04-26 09:48:54
在看到它出现之前,我从来没有想过这件事,但这个问题真的吸引我! – 2011-04-26 10:03:14