2011-04-23 76 views
4

我注意到,如果你设置一个事件源(即你将要做服务器的AJAX请求),并开始快速点击下个月迅速它会触发每个月的请求。所以如果我点击迅速获得5次5请求将会关闭。延迟JSON饲料的jQuery全日历

我该如何做到这一点,只有当用户停止点击时才会触发它。我发现如此浪费资源并可能导致错误。

+0

在看到它出现之前,我从来没有想过这件事,但这个问题真的吸引我! – 2011-04-26 10:03:14

回答

0

你对此绝对正确,我已经向开发团队提出了这方面的错误。

http://code.google.com/p/fullcalendar/issues/detail?id=920&can=1&sort=-id&colspec=ID%20Type%20Status%20Milestone%20Summary%20Stars

我能想到这样做,现在唯一的办法就是使用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 
      },   
+0

你能告诉我这个加载事件如何看起来像超时?我们是否通过超时延迟了Ajax请求?还有一种方法可以监控点击何时停止。就像发生5次点击或类似的事情只使用一次。因为我不确定计时器是否是最好的选择。 – chobo2 2011-04-25 20:57:04

+0

对,我其实注意到你的意思是别的,你的问题。我知道它不合乎逻辑,但试着快速点击月/日/月/日/月/日,看看有什么好处;)任何方式 - 今天我会有一些代码来解决你的和我的问题,因为我需要解决这个问题问题在我的网站 – ppumkin 2011-04-26 08:33:48

+0

你将不得不这样做,以检测用户是否想要提前/延迟几个月。否则,请使用lazyFetching http://arshaw.com/fullcalendar/docs/event_data/lazyFetching/,它会记住已加载的所有数据,并且在缓存的月份内不会请求ajax。我已经添加了一些代码到原来的答案 – ppumkin 2011-04-26 09:48:54