2017-02-07 82 views
1

我正在使用SharePoint 2013列表作爲事件源。因爲它被用作數據表,所以沒什麼特別的。SharePoint 2013列表中的事件和AsyncQuery

我使用客戶端的JavaScript API,並獲得與功能項目(從列表中)executeQueryAsync

下面是代碼

var clientContext = new SP.ClientContext.get_current(); 
    oWebsite = clientContext.get_web(); 
    var oList = oWebsite.get_lists().getByTitle('EventsList'); 
    var camlQuery = new SP.CamlQuery(); 

    camlQuery.set_viewXml("<View><ViewFields><FieldRefName='ID' /><FieldRef Name='Title' /><FieldRef Name='EventDate' /><FieldRef Name='EndDate' /></ViewFields><Query><Where><And><Geq><FieldRef Name='EventDate'/><Value Type='DateTime'>" + startDate + "</Value></Geq><Leq><FieldRef Name='EndDate'/><Value Type='DateTime'>" + endDate + "</Value></Leq></And></Where></Query></View>"); 

    this.collListItem = oList.getItems(camlQuery); 
    clientContext.load(collListItem); 
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed)); 

我面臨的問題是,deletegatefunction觸發器只有當AsyncQuery完成時。 onQuerySucceeded函數如下

function onQuerySucceeded(sender, args) { 
    var listItemInfo = ''; 
    var listItemEnumerator = collListItem.getEnumerator(); 

    eventSourceArray.push({ title: 'Test Event', start: '2017-02-08' }); 

    while (listItemEnumerator.moveNext()) { 
     alert(listItemEnumerator); 
     var oListItem = listItemEnumerator.get_current(); 
     listItemInfo += '\nID: ' + oListItem.get_id() + 
     alert(oListItem.get_item('Title')); 
    } 

} 

「警報」僅用於測試目的。如果我將警報置於此功能中,則會顯示該警報。但是,不會顯示被推入源的事件。一旦查詢完成,我正在尋找一種刷新日曆的方法。

更新: 我要顯示在其中作爲活動源eventSourceArray異步填充的事件(見下面的代碼)

jQuery('#calendrier').fullCalendar({ 
     header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay' 
     }, 
     defaultDate: today, 
     lang: 'fr-ca', 
     buttonIcons: true, 
     weekNumbers: false, 
     editable: false, 
     eventLimit: true, 
     events: eventSourceArray 
    }); 

現在我正在尋找一種方式來重新加載日曆或在數組中添加事件以顯示即使頁面已被加載。

更新:

我試過這個,但它沒有效果。 https://fullcalendar.io/docs/event_data/addEventSource/

jQuery('#calendrier').fullCalendar('refetchEventSources', eventSourceArray); 

我添加了一個警報,以顯示該陣列的(eventSourceArray)的長度和所述項都在那裏)

UPDATE:

試圖復位的事件與我的陣列

events: eventSourceArray 

然後調用refetchEvents https://fullcalendar.io/docs/event_data/refetchEvents/

jQuery('#calendrier').fullCalendar('refetchEvents') 

回答

0

這奏效了在OnQuerySucceed函數結束

jQuery('#calendrier').fullCalendar('removeEventSources', eventSourceArray) 
jQuery('#calendrier').fullCalendar('addEventSource', eventSourceArray)