Unable to parse binding attribute

https://groups.google.com/d/topic/knockoutjs/0LvK7gF9KBQ/discussion

by alekzonder

HTML

<script src="https://github.com/jquery/jquery-tmpl/raw/master/jquery.tmpl.js"></script>
<script src="https://github.com/SteveSanderson/knockout/raw/master/build/output/knockout-latest.debug.js"></script>
First name: <input data-bind="valueWithInit: 'test().info().name'" /><br/>
Last name: <input data-bind="valueWithInit: 'lastName'"/>

<hr/>
<div data-bind="text: ko.toJSON(viewModel) "></div>

CSS

input { margin: 2px; }

JavaScript

window.viewModel = {

};

    
//Another option: rewrite binding after making sure that it is initialized
ko.bindingHandlers.valueWithInit = {
    init: function(element, valueAccessor, allBindingsAccessor, context) {
        
        var value = valueAccessor();
        
        //console.log(value);
        
        var dotPos = value.indexOf('.');
        
        if (dotPos != -1) {
            // разбор на объекты
            var elements = value.split('.');
            
            var iter_context = context;
            
            //if (!context[value]) {
//                context[value] = ko.observable();   
  //          }
            
            for (var i in elements) {
                var elem = elements[i];
                
                elem = elem.replace('(', '');
                elem = elem.replace(')', '');
                
                console.log(elem);
                

                
                if (!iter_context[elem]) {
                    
                    if (elements.length > 1 && (elements.length - 1) != i ) {
                        
                        iter_context[elem] = ko.observable({});                    
                        iter_context = iter_context[elem];
                    } else {
                        if (elements.length > 1) {
                           iter_context()[elem] = ko.observable();
                        } else {
                           iter_context[elem] = ko.observable(); 
                        }
                    }


                    


                }               
            }
        } else {
            if (!context[value]) {
                context[value] = ko.observable();   
            }
        }
        
        console.log(context);
        
        $(element).attr("data-bind", "value: " + value);
        console.log($(element).attr('data-bind'));
        ko.applyBindingsToNode(element, null, context);
    }
}

ko.applyBindings(window.viewModel);