KO Track Changes
KO Track changes of Observables and Mapped objects to check if isDirty
by lifetimelearner
JavaScript
;(function (ko) {
ko.DirtyFlag = function (objectToTrack, objectName , isMapped, mappedKey ,isInitiallyDirty) {
var self = this,
_initialObject = objectToTrack,
_initialObjectValue = _initialObject(),
_persistentObject = ko.observable(objectToTrack),
_persistentObjectValue = _persistentObject(),
_objectName = objectName;
var result = function () {
self.isDirty = ko.computed(function () {
return _initialObjectValue !== _persistentObjectValue();
});
self.changeDetails = function () {
return _objectName + ' changed from ' + _initialObjectValue + ' to ' + _persistentObjectValue() + '. ';
};
return self;
};
return result;
};
ko.DirtyFlagMapping = function (mappedToTrack, mappedFieldsToTrack) {
var self = this,
_objectName = mappedFieldsToTrack,
_initialObjects = $.parseJSON('[' + ko.mapping.toJSON(mappedToTrack) + ']')[0],
_persistentObjects = ko.observable(mappedToTrack());
self.changeDetails = function () {
return _objectName + ' changed from ' + _initialObjectValue + ' to ' + _persistentObjectValue() + '. ';
};
self.outputObjectValues = function () {
return _initialValue;
};
var result = function () {
self.isDirty = function () {
var dirtyResult = false;
for (var i = 0; i < self.initObj().length; i++)
{
$.each(_objectName, function (index, name){
if (result || _initialObjects[i][name.toString()] != _persistentObjects()[i][name.toString()]())
{
dirtyResult = true;
}
});
}
return dirtyResult;
};
};
return...