KnockoutJS - how do I debounce clicks?
unknown
javascript
2 years ago
1.3 kB
5
Indexable
// https://github.com/jashkenas/underscore/blob/7342e289aa9d91c5aacfb3662ea56e7a6d081200/underscore.js#L683 var _debounce = function (func, wait, immediate) { var timeout, result; return function () { var context = this, args = arguments; var later = function () { timeout = null; if (!immediate) result = func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) result = func.apply(context, args); return result; }; } // http://jsfiddle.net/sabrewulf/kHa9H/ // https://stackoverflow.com/a/19093083/4078503 ko.bindingHandlers.debouncedClick = { 'init': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { var allBindings = allBindingsAccessor(), wait = allBindings.wait || 350, immediate = allBindings.immediate || true, throttled = _debounce(valueAccessor(), wait, immediate), newValueAccessor = function () { return throttled; }; return ko.bindingHandlers.click.init(element, newValueAccessor, allBindingsAccessor, viewModel, bindingContext); } };
Editor is loading...