Dynamically construct ko mapping options
Construct mapping options dynamically iterating all incoming properties
HTML
<script src="https://raw.github.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.js"></script>
A: <b data-bind="text: a"></b><br/>
B: <b data-bind="text: b"></b><br/>
C: <b data-bind="text: c"></b><br/>
<span data-bind="with: d">
D.a: <b data-bind="text: a"></b><br/>
D.b: <b data-bind="text: b"></b><br/>
</span>
JavaScript
var testData = {
a: "Test",
b: undefined,
c: "value",
d: ""
};
var ViewModel = function(data) {
var mappingOptions = {};
for (var key in data) {
if (key!='d') {
mappingOptions[key] = {
create: function(options) {
return ko.observable(options.data || "123");
}
};
}
else {
mappingOptions['d'] = {
create: function(options) {
var t = options.data;
var a = ko.observable(t.substring(0,2));
var b = ko.observable(t.substring(2,4));
return ko.observable({a:a, b:b});
}
};
}
}
ko.mapping.fromJS(data, mappingOptions, this);
};
var a = new ViewModel(testData);
ko.applyBindings(a);
a.a("hey");