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;
          ...