我注意到,如果你設置一個事件源(即你將要做服務器的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