When mapping ko.mapping.fromJS values are null

It happened because ko.mapping.fromJS has the following signature:

ko.mapping.fromJS(data, mappingOptions, viewModel);

Where data - is your json data, mappingOptions - is the instructions to mapping plug how to map your date, viewModel - is object to store mapped data.

ko.mapping.fromJS(data) - this syntax will create view model.

ko.mapping.fromJS(data, mappingOptions) - this will create view model with particular options.

ko.mapping.fromJS(data, {}, viewModel) - and this one convers your data without mapping options and put it to view model.

Read the documentation for better understanding: http://knockoutjs.com/documentation/plugins-mapping.html


Based on reading the documentation on Knockout's website, I believe that calling:

var viewModel = ko.mapping.fromJS(data);

Will automatically create you a ViewModel. This means that you don't need to declare a ViewModel yourself as the mapping plugin creates one with observable properties.

After you have called this for the first time you can then use

ko.mapping.fromJS(data, viewModel);

To update your ViewModel data, say after you have loaded more data via an ajax request.

The solution to fix this should be:

var pledge = {"name":"Moses","Assets":[{"CityId":13,"commetns":null},{"CityId":14,"commetns":null}]};

var pledgeVMinstance = ko.mapping.fromJS(pledge);