2 'throttle': function(target, timeout) {
3 // Throttling means two things:
5 // (1) For dependent observables, we throttle *evaluations* so that, no matter how fast its dependencies
6 // notify updates, the target doesn't re-evaluate (and hence doesn't notify) faster than a certain rate
7 target['throttleEvaluation'] = timeout;
9 // (2) For writable targets (observables, or writable dependent observables), we throttle *writes*
10 // so the target cannot change value synchronously or faster than a certain rate
11 var writeTimeoutInstance = null;
12 return ko.dependentObservable({
14 'write': function(value) {
15 clearTimeout(writeTimeoutInstance);
16 writeTimeoutInstance = setTimeout(function() {
23 'notify': function(target, notifyWhen) {
24 target["equalityComparer"] = notifyWhen == "always"
25 ? function() { return false } // Treat all values as not equal
26 : ko.observable["fn"]["equalityComparer"];
31 function applyExtenders(requestedExtenders) {
33 if (requestedExtenders) {
34 for (var key in requestedExtenders) {
35 var extenderHandler = ko.extenders[key];
36 if (typeof extenderHandler == 'function') {
37 target = extenderHandler(target, requestedExtenders[key]);
44 ko.exportSymbol('extenders', ko.extenders);