I would like to build a custom bindingHandler
ko.bindingHandlers.foreachWithHighlight that has an highlight effect when afterAdd.
yellowFadeIn: function(element, index, data) {
$(element).filter("li")
.animate({ backgroundColor: 'yellow' }, 200)
.animate({ backgroundColor: 'white' }, 800);
},
But I want to always add this to my valueAccessor and pass it to the foreach binding.
ko.bindingHandlers.foreachWithHighlight = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, context) {
return ko.bindingHandlers.foreach.init(element, valueAccessor, allBindingsAccessor, viewModel, context);
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel, context) {
var value = ko.unwrap(valueAccessor());
var newValue = function () {
return {
data: value,
afterAdd: function(element, index, data) {
$(element).filter("li")
.animate({ backgroundColor: 'yellow' }, 200)
.animate({ backgroundColor: 'white' }, 800);
}
};
};
return ko.bindingHandlers.foreach.update(element, newValue, allBindingsAccessor, viewModel, context);
}};
How can I prevent it from running the first time when all the nodes from the server is added. I just want it to run when new nodes added.
If I understand your scenario correctly, then the issue is that the initial time that you populate your observableArray (after binding) you see your highlight. One way to handle a scenario like this would be to use
ko.utils.domDataor$.datato put a flag on the element to indicate that it is now ready for the highlight effect.Something like:
Fiddle here: http://jsfiddle.net/rniemeyer/zGJX3/