Дросселирование функции Реми Шарпа - PullRequest
0 голосов
/ 18 октября 2011

пытается использовать функцию регулирования, созданную Реми Шарпом (http://remysharp.com/2010/07/21/throttling-function-calls/)..., она работает при стандартном использовании примерно так:

$('.thing').click(throttle(function() { 
   console.log('api call'); 
}, 300);

Что довольно красиво, но я хотел иметь возможностьрегулирование определенной части кода внутри функции, а не всего события щелчка, например:

$('.thing').click(function() { 
    console.log('hello!'); 

    throttle(function() { 
        console.log('api call'); 
    }, 300); 

});

Но я не совсем понимаю, почему это не работает. Код регулирования возвращает функцию, так чтоесли я продолжу вызов газа с помощью .apply(this, arguments);, а затем напечатаю «привет», функция вызывается не один раз, а 5 раз, поскольку таймер в функции регулирования не перезаписывается.но я не смог ничего найти. Я предполагаю, что jQuery создает один его экземпляр, а затем вызывает тот же экземпляр, чтобы был тот же таймер?

Кто-нибудь понимает это и почему это происходит так?*

Спасибо, Дом

Ответы [ 3 ]

1 голос
/ 23 октября 2011

Вы делаете это неправильно; -)

Вот решение для jsbin: http://jsbin.com/elabul/edit

Метод throttle возвращает функцию, которая будет регулироватьсколько раз это называется.Поэтому вам нужно захватить этого плохого парня в переменную и вызвать его из вашего обработчика кликов, например:

var inputThrottle = throttle(function () {
  console.log('api call');
}, 250);


$('input').keyup(function () {
   console.log('test');
   inputThrottle();
});
0 голосов
/ 18 октября 2011

вам нужно вызвать возвращенную функцию газа:

$('.thing').click(function() { 
    console.log('hello!'); 

    (throttle(function() { 
        console.log('api call'); 
    }, 500))(); 

});
0 голосов
/ 18 октября 2011

Просто вызов throttle ничего не делает, вам нужно вернуть функцию как функцию в обработчик кликов:

$('.thing').click((function() { 
    console.log('hello!'); 

    return throttle(function() { 
        console.log('api call'); 
    }, 300); 

}()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...