Я использую список 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')