Подчеркнуть газ + обеспечить последний звонок - PullRequest
5 голосов
/ 08 марта 2012

Подчеркивает метод, дроссель.Из их документов:

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

Теперь представьте случай автозаполнения формы.Это означает, что если «abc» введено, скажем, в окне, скажем, 100 мс, то будет отправлен только поиск «a», а не «bc».

Является ли это радикальным упущением со стороныunderscore.js?Что бы вы предложили в качестве чистого решения?

Ответы [ 4 ]

4 голосов
/ 15 сентября 2014

Ах, я не правильно прочитал документы! - это функция для этого.

var test = _.debounce(function() { console.log('foo'); }, 3000);

Тогда, если вы позвоните test() несколько раз, вы заметите, что только через три секунды после вызова last эта функция когда-либо будет вызвана.

Это точно , что мы оба искали ... и не заметили, было прямо под throttle на документах.

Подчеркнуть документы , Документы Lo-Dash ( Что такое LoDash? )

3 голосов
/ 25 апреля 2012

В этом случае вы можете использовать следующую «буферную» функцию, которая будет применять только последний вызов в окне ожидания.

https://gist.github.com/2484196

_.buffer = function(func, wait, scope) {
  var timer = null;
  return function() {
    if(timer) clearTimeout(timer);
    var args = arguments;
    timer = setTimeout(function() {
      timer = null;
      func.apply(scope, args);
    }, wait);
  };
};
1 голос
/ 08 марта 2012

Я поддерживаю функцию idle , чтобы обрабатывать этот тип взаимодействия с пользователем. Идея состоит в том, чтобы требовать вызова некоторой функции через регулярные промежутки времени (т. Е. При нажатии клавиши на входе); как только интервал проходит без вызова указанной функции, запускается отдельный обратный вызов. Возможно, это не совсем то поведение, которое требуется для автозаполнения (возможно, вы захотите начать поиск до того, как ввод пользователя приостановится), но это один из подходов, который я использовал в прошлом.

Если у кого-то есть лучшее решение для этого, я все уши!

0 голосов
/ 08 марта 2012

Да, вы правы, что для автозаполнения формы это не будет работать хорошо.Я думаю, что это предназначено для других типов вещей, хотя.Данный пример обрабатывает события прокрутки.

...