Проверка удаленияEventListener с помощью JSLint - PullRequest
0 голосов
/ 25 июля 2010

Я понимаю, почему JSLint выдает здесь предупреждение, но я не знаю, как еще написать свой код, чтобы он проверялся.

Вот пример с отваркой.В приведенном ниже коде у меня есть объект, к которому мне нужно присоединить два прослушивателя событий: один для «завершения», а другой для «ошибки».Каждый указывает на свой собственный обработчик событий.Когда достигается какой-либо обработчик событий, я хочу удалить оба обработчика событий.Но я всегда получаю ошибку проверки при попытке удалить слушатель второго обработчика событий из первого обработчика событий.

var myFunction = function(obj) {
    var doComplete = function() {
        // ...Do something here to handle successful execution, then remove listeners
        obj.removeEventListener('complete',doComplete,true);
        obj.removeEventListener('error',handleError,true); // INVALID!
    };
    var handleError = function() {
        // ...Do some error handling here and then remove event listener
        obj.removeEventListener('complete',doComplete,true);
        obj.removeEventListener('error',handleError,true);
    };

    obj.addEventListener('complete',doComplete,true);
    obj.addEventListener('error',handleError,true);
    obj.load();
};

Всякий раз, когда я получаю одно из этих предупреждений, это всегда означало, что я делаю что-то не так, но в этом случае я не вижу, как обойти проблему.Кто-нибудь знает, как правильно это сделать?

Ошибка проверки: Lint at line 5 character 41: 'handleError' is not defined. (веб-клиент говорит Implied global: handleError 5)

1 Ответ

1 голос
/ 26 июля 2010

Вам нужно изменить порядок кода немного .

var myFunction = function(obj) {
    var doComplete, handleError;
    doComplete = function() {
        // ...Do something here to handle successful execution, then remove listeners
        obj.removeEventListener('complete',doComplete,true);
        obj.removeEventListener('error',handleError,true); // INVALID!
    };
    handleError = function() {
        // ...Do some error handling here and then remove event listener
        obj.removeEventListener('complete',doComplete,true);
        obj.removeEventListener('error',handleError,true);
    };

    obj.addEventListener('complete',doComplete,true);
    obj.addEventListener('error',handleError,true);
    obj.load();
};

JSLint ожидает увидеть объявление переменной перед ее использованием.Это изменение делает это, даже если оно кажется неэффективным.

...