Nested mapping problem

by whelkaholism

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.2/moment.min.js"></script>
<div data-bind="text: ko.mapping.toJSON($data)"></div>

JavaScript

var NS = {};
var _itest = 0;

// =====================================================================
NS.FieldModelBase = function(data, mapping)
{
    var _this = this;

    this.Text = ko.observable();
    this.AlternateField = {};       

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

// =====================================================================
NS.FieldModel = function(data, mapping, parent)
{
    var _this = this;	

    window.console && console.log((!!parent ? 'SUB ' : '') + 'FIELD', data); 
    
    var _mapping = {
        copy: [ 'AlternateField' ]
    };
    
    NS.FieldModelBase.call(_this, data, _mapping);
        
    this.AlternateField = data.AlternateField ? new NS.FieldModel(data.AlternateField, null, _this) : null;
    
	if(!!parent)
		window.console && console.log('  _this', ko.toJS(_this));    
}		

NS.FieldModel.prototype = new NS.FieldModelBase;

// =====================================================================
NS.ListModelBase = function(data, mapping)
{
    var _this = this;

    this.Fields = ko.observable();

    if(data)
        ko.mapping.fromJS(data, mapping, _this);
};

// =====================================================================
NS.ListModel = function(data, mapping)
{
    var _this = this;

    var _mapping = $.extend({}, mapping, {
        'Fields': {
            create: 
            	function(o) 
	            { 
    	            var res = {};

        	        $.each(o.data,
						function(sectionkey, section)
                        {
                    		var secres = [];

                    		$.each(section,
                           		function(fieldindex, field) 
                           		{
                        			secres.push(new NS.FieldModel(field));
                    			}
                          	);

                    		res[sectionkey] = secres;
                		}
                	);

                	return res;
            	}
        }
    });
    
    this.Sections =...