toJSON mapping plugin

http://stackoverflow.com/questions/11148214/tojson-view-model-overrides-not-being-reflected-after-knockout-unmapping

by rniemeyer

HTML

<script src="https://raw.github.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.debug.js"></script>

JavaScript

function ChildViewModel(parentViewModel, data) {
    var self = this;

    ko.mapping.fromJS(data, {}, self);

    self.parent = parentViewModel;
}

function ParentViewModel(data) {
    var self = this;

    var mapping = {
        'child': {
            create: function (options) {
                return new ChildViewModel(self, options.data);
            }
        },
        'ignore': ['child']
    };

    ko.mapping.fromJS(data, mapping, self);
}

ParentViewModel.prototype.toJSON = function () {
    var copy = ko.toJS(this);

    delete copy.child;

    return copy;
};

var data = {
    name: 'Fred',
    child: {
        name: 'Joe'   
    }
};

var mapping = {
    'child': {
        create: function (options) {
            return new ChildViewModel(self, options.data);
        }
    }
};

var parentViewModel = new ParentViewModel(data);

var unmappedJson = ko.mapping.toJSON(parentViewModel, { ignore: ['child'] });

alert(unmappedJson);