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