2017-07-11 23 views
0

您好,我在使用完整日曆庫時遇到問題。FullCalendar加倍使用JQuery的事件

只有當我點擊我的自定義「過濾器」按鈕並更改月份時,事件纔會加倍。

當我調用過濾器時,我將刪除所有事件並使用過濾結果重新填充。這個問題看起來像當我點擊左/右按鈕時,它會再次調用事件羣並添加事件。我想禁用或重寫它。

這裏是正在發生的事情: enter image description here

日曆代碼:

function calendarView() 
{ 
    //$('#calendar').fullCalendar('removeEvents') 

    var url_str = "/Calendar/GetCalendarEvents" 
    $('#calendar').fullCalendar({ 
     header: { 
      left: 'prev,next, today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay' 
     }, 

     fixedWeekCount: true, 
     eventLimit: 4, 
     events: url_str, 
     eventClick: function (calEvent, jsEvent, view) 
     { 
      editable: false; 
      var currentDate = new Date(); 
      currentDate.setHours(0, 0, 0, 0); 
      if (calEvent.start >= currentDate - 1) 
       openEditVisit(calEvent.id) 
     } 
    }); 

}; 

過濾器按鈕來調用代碼

$.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: "/Calendar/GetCalendarEvents", 
     data: j, 
     async: false, 
     dataType: 'json', 
     success: function (data) 
     { 
      $('#calendar').fullCalendar('removeEvents') 
      $('#calendar').fullCalendar('addEventSource', data) 

     }, 
     error: function (xhr, err) { 
      alert("ERROR! - readyState: " + xhr.readyState + "<br/>status: " + xhr.status + "<br/>responseText: " + xhr.responseText); 
     } 
    }); 
+0

'async:false'你爲什麼需要這個?它只是在ajax運行時鎖定瀏覽器,並可能導致用戶認爲它崩潰了,尤其是,如果請求比平時花費更長時間。在某些瀏覽器中,它已經被棄用了,所以你可以在你的控制檯中看到警告,並且最終該功能根本不起作用。 – ADyson

回答

0

你有問題,因爲既然你已經定義事件作爲JSON提要(events: url_str),無論何時您更改視圖,它將取那些事件而沒有過濾器選項。除之外,這是您之前添加爲過濾事件作爲單獨的事件源。

因此,您可以使用的更好的解決方案是利用內置的事件即功能功能,並讓您的自定義功能將您的用戶界面中的過濾器選項考慮在內,並將它們與服務器一起發送給服務器由fullCalendar提供的開始/結束日期。這將確保當您更改視圖或日期時,返回的結果會將您的過濾考慮在內,並且也不會複製事件。

您額外的過濾器按鈕可能會在點擊時調用「refetchEvents」,以便從已定義的主事件源中使用過濾器選項進行刷新。

請參閱https://fullcalendar.io/docs/event_data/events_function/