Как передать событие в функцию debounce? - PullRequest
1 голос
/ 25 сентября 2019

Я выполняю поиск по типу компонента Lightning для Salesforce.Я сделал функцию debounce, чтобы проверить, перестает ли пользователь печатать, что делает задержку успешно.Однако функция, которая запускается в моей функции debounce, теперь не будет принимать событие, а console.log(event) говорит 'undefined'.Я не уверен, как исправить эту ошибку.Мой код ниже ...

    debounce(func, wait, immediate) {
        var timeout;

        return function executedFunction() {
          var context = this;
          var args = arguments;

          var later = function() {
            timeout = null;
            if (!immediate) func.apply(context, args);
          };
          var callNow = immediate && !timeout;
          clearTimeout(timeout);
          timeout = setTimeout(later, wait);
          if (callNow) func.apply(context, args);
        };
      }

    termChange(evt) {
        this.rows = [];
        this.searchTerm = evt.target.value;
        this.getCases();
    }

    handleTermChange = this.debounce(evt, function(){
        this.termchange();
    }, 2000, false)

Когда я использовал просто вызывать termChange, он будет искать каждое нажатие клавиши, и вы получите дубликаты или нежелательные записи.Теперь с debounce это откладывается, но я не могу найти способ передать событие. (this.getCases() - еще одна созданная мной функция, которая извлекает записи.) Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 26 сентября 2019

Во-первых, функция debounce принимает функцию в качестве первого аргумента, и вы пытаетесь вызвать ее с объектом события .Во-вторых, termChange в верблюжьей оболочке, но внутри вызова debounce все строчные, поэтому этот код не будет работать в любом случае.

Теперь давайте внимательно посмотрим, что делает debounce.Он принимает функцию, а затем возвращает другую функцию, которая ожидает те же точные аргументы.Поэтому, если вы просто выполните:

handleTermChange = debounce(termChange)

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

...