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