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