2017-02-07 2 views
1

Я использую список SharePoint 2013 как источник событий. Ничего особенного там, поскольку он используется в качестве таблицы данных.События и AsyncQuery из списка SharePoint 2013

Я использую клиента 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')); 
    } 

} 

«Предупреждение» предназначено только для целей тестирования. Если я помещаю оповещения в эту функцию, она отображается. Однако событие, которое вставляется в источник, не отображается. Я ищу способ обновить календарь после завершения запроса.

UPDATE: события, которые я хочу показать заселены асинхронно в 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 
    }); 

Сейчас я ищу способ, чтобы перезагрузить календаря или добавьте события в Массив, чтобы показать, даже если страница уже загружена.

UPDATE:

Я попробовал это, но это не имеет никакого эффекта. 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) 
Смежные вопросы