2011-04-23 26 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