Utilize the $$hashKey
.
function adjustEventSize ( event, delta, revertFunc, jsEvent, ui, view ) {
var end = moment(event.end).add(delta._milliseconds, 'milliseconds');
$scope.availableEvents.events.map(function(eventModel) {
// locate event by hashKey
if (eventModel.$$hashKey === event.$$hashKey) {
eventModel.end = end;
}
});
}
I opted to use a comprehensive update function where I search by $$hasKey
and sanitize the model manually to maintain the cleanliness of the events collection. Here's a more detailed example (disregard the excessive use of $scope, as it is just for representation):
$scope.adjustEventSize = function(event, delta, revertFunc, jsEvent, ui, view) {
$scope.updateEvent(event, delta, revertFunc, jsEvent, ui, view);
};
$scope.addNewEvent = function (momentDate) {
// default to adding event today
momentDate = momentDate || moment();
$scope.events.push($scope.cleanseEventData({
title: 'New Event',
startTimestamp: momentDate.unix(),
start: momentDate.format(),
allDay: true,
stick: true // prevents new events from disappearing when switching views
}));
};
// an encapsulation to correctly update angular models from fullcalendar events
// also tidies up dates
$scope.updateEvent = function(event, delta, revertFunc, jsEvent, ui, view) {
$scope.events.map(function(eventModel) {
// locate event by hashKey
if (eventModel.$$hashKey === event.$$hashKey) {
eventModel.allDay = event.allDay;
eventModel.start = event.start;
eventModel.end = event.end;
$scope.cleanseEventData(eventModel);
}
});
};
$scope.cleanseEventData = function(eventModel) {
eventModel.start = moment.utc(eventModel.start).format();
eventModel.startTimestamp = moment(eventModel.start).unix();
if (eventModel.end) {
eventModel.end = moment.utc(eventModel.end).format();
}
// other sanitization steps ...
return eventModel;
};
$scope.eventSources = retrieveEventSources();
function retrieveEventSources() {
// fetch pre-processed json script template
$scope.jsonEvents = jsonCache.get($attrs.jsonDataId);
$scope.events = $scope.jsonEvents.events;
$scope.events.map($scope.cleanseEventData);
return [$scope.events];
}