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