2017-02-07 49 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)