I get the following data from the server:
var data = [{ id: 0, child: { prop1 : 'a', prop2 : 'b' } } //Child object has data
,{ id: 0, child: null } ]; // Child object is null
I'm having some issues after I map the data using the knockout mapping plugin. The issue is that the inner child
object is not of the same type.
After executing this:
ko.mapping.fromJS(data, viewModel.data);
I get that the first object has a child
property of type Object
with the data. However the second object has a property child
of type Observable
that when it's unwrapped returns null.
How can I make that in both cases the objects have the same type even one has value and the other one is null. Changing the way the server behaves is not an option. I expect having Object
and null
or both Observables
.
JsFiddle here.
You need to use the create
option to tell the mapping plugin how it should map your child
property.
So if you want to have having Object
and null
you need to return null
when your child property is null
:
var mappingOptions = {
child: {
create: function(options) {
if (!options.data)
return null;
return ko.mapping.fromJS(options.data);
}
}
}
ko.mapping.fromJS(data, mappingOptions, viewModel.data);
Demo JSFiddle.
Or if you want them both Observables
:
var mappingOptions = {
child: {
create: function(options) {
return ko.observable(ko.mapping.fromJS(options.data));
}
}
}
ko.mapping.fromJS(data, mappingOptions, viewModel.data);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With