KnockoutJS nested custom binding
HTML
<ul data-bind="nestMe: name"></ul>
JavaScript
ko.bindingHandlers.nestMe = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
console.log('--INIT'+element.id);
var observable = valueAccessor() || { };
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
console.log('--UPDATE'+element.id);
var observable = valueAccessor() || { };
var unwrapped = ko.unwrap(observable);
element.innerHTML = '<li>'+unwrapped+'<ul data-bind="foreach: children"><li data-bind="nestMe: name" /></ul></li>';
}
};
var rootModel = function(name, children) {
var self = this;
self.name = ko.observable(name);
self.children = ko.observableArray(children);
};
var basemodel = new rootModel('test');
basemodel.children.push(new rootModel('aaa',[new rootModel('111'),new rootModel('222')]));
basemodel.children.push(new rootModel('bbb'));
basemodel.children.push(new rootModel('ccc',[new rootModel('333'),new rootModel('444')]));
ko.applyBindings(basemodel);