KO Track Changes
Latest/Working KO track changes
by lifetimelearner
JavaScript
(function (ko) {
ko.DirtyFlagMapping = function (mappedObjectsToTrack, objectTypeToTrack, mappedFieldsToTrack) {
var self = this,
_objectName = mappedFieldsToTrack,
_initialObjects = $.parseJSON('[' + ko.mapping.toJSON(mappedObjectsToTrack()) + ']')[0],
_persistentObjects = ko.observable(mappedObjectsToTrack()()),
_persistentChanges = ko.observableArray();
var result = function () {
self.isDirty = ko.computed(function () {
var dirtyResult = false;
_persistentChanges.removeAll();
for (var i = 0; i < _initialObjects.length; i++)
{
$.each(_objectName, function (index, name){
var fieldTracked = name.toString(),
type = _persistentObjects()[i][objectTypeToTrack](),
originalValue = _initialObjects[i][fieldTracked],
updatedValue = _persistentObjects()[i][fieldTracked]();
if (originalValue != updatedValue)
{
self.outputChanges(type, fieldTracked, originalValue, updatedValue);
dirtyResult = true;
}
});
}
return dirtyResult;
});
self.outputChanges = function (type, fieldUpdated , originalValue, updatedValue) {
if ($.trim(type) != '' && type != null)
{
_persistentChanges.push(type + '-' + fieldUpdated + ' changed from ' + originalValue + ' to ' + updatedValue + '. ');
}
return _persistentChanges();
};
self.changes = function ( ){
return _persistentChanges;
};
return self;
};
return result;
};
})(ko);