Recursive knockout template with ko.mapping

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.js"></script>

JavaScript

var formElementNode = {
    Nombre: "Juan",
    Hijos: [{Profesion: "Cani"}, {Profesion: "Albanil"}]
};

 var mappingStages = function (options) {
                        
            var stageSelf = options != null ? options : this;
						stageSelf.Profesion = ko.observable(options != null ? options.Profesion : "sae");
            return stageSelf;
        };


var mappingOptions = {
            
            create: function (options) {
                return new function () {
                    var self = options.data;
                    
                    self.test = ko.observable("hola")
                    self.ProposalStages = ko.observableArray(ko.utils.arrayMap(self.Hijos, mappingStages ));
                    
                    self.Total = ko.computed(function () {
               return self.ProposalStages().length;
            });
                   
                    ko.mapping.fromJS(self, mappingOptions, this);
                };
            }
        };



var viewModel = ko.mapping.fromJS(formElementNode, mappingOptions);

console.log(viewModel)
console.log(viewModel.Total())

viewModel.ProposalStages.push(new mappingStages(null))
viewModel.ProposalStages.valueHasMutated();

console.log(viewModel.Total())
console.log(viewModel.ProposalStages())


ko.applyBindings(viewModel);