how to reapply knockout binding
Posted
by
MikeW
on Stack Overflow
See other posts from Stack Overflow
or by MikeW
Published on 2012-07-11T03:27:06Z
Indexed on
2012/07/11
15:15 UTC
Read the original article
Hit count: 289
knockout.js
|zebra-striping
Currently I have a knockout binding that stripes rows in a list which works fine
ko.bindingHandlers.stripe = {
update: function (element, valueAccessor, allBindingsAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()); //creates the dependency
var allBindings = allBindingsAccessor();
var even = allBindings.evenClass;
var odd = allBindings.oddClass;
//update odd rows
$(element).children(":nth-child(odd)").addClass(odd).removeClass(even);
//update even rows
$(element).children(":nth-child(even)").addClass(even).removeClass(odd); ;
}
}
Triggered from
<button data-bind="click: addWidget" style="display:none">Add Item</button>
The problem I have is when reloading data from the server , I call addWidget() manually in the view model the stripe binding handler is not applied - all rows appear as same color, if I click the html button then the binding happens and stripes appear
var ViewModel = function() {
self.addWidget();
});
Is it possible to reapply this custom binding manually in js?
Thanks
Edit:
The stripe binding gets applied like so
<div data-bind="foreach: widgets, stripe: widgets, evenClass: 'light', oddClass: 'dark'">
© Stack Overflow or respective owner