Newer KO Track Changes
by lifetimelearner
JavaScript
;(function (ko) {
ko.DirtyFlag = function (objectToTrack, objectName) {
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);
(function (ko) {
ko.DirtyFlagMapping = function (mappedToTrack, objectType ,mappedFieldsToTrack) {
var self = this,
_objectName = mappedFieldsToTrack,
_initialObjects = $.parseJSON('[' + ko.mapping.toJSON(mappedToTrack()) + ']')[0],
_persistentObjects = ko.observable(mappedToTrack()()),
_persistentChanges = ko.observableArray();
var result = function () {
self.isDirty = ko.computed(function () {
var dirtyResult = false;
for (var i = 0; i < _initialObjects.length; i++)
{
$.each(_objectName, function (index, name){
var valueName = name.toString(),
type = objectType + ': ' + _persistentObjects()[i][objectType](),
originalValue = _initialObjects[i][valueName],
updatedValue = _persistentObjects()[i][valueName]();
if (originalValue != updatedValue)
{
self.outputChanges(type,originalValue,updatedValue);
dirtyResult = true;
...