Есть ли способ сделать этот неопределенный объект безопасным? - PullRequest
0 голосов
/ 22 июня 2019

На странице в веб-приложении экран / виджет загрузки продолжают появляться после того, как пользователь покидает текстовое поле.

Приложение использует версию 1.6.0.3. Я посмотрел на самую последнюю версию Prototype 1.7.3 и не нашел этой функции.

Я также проверял другие случаи, когда вызывался этот метод. Если пользовательский ввод отсутствует, виджет не зависает.

Эта ошибка отображается в консоли инструментов разработчика Chrome.

    at E (framework.pack.js:1699)
    at Function.stopObserving (framework.pack.js:1732)
    at A.hide (ui.pack.js:13410)
    at A.render (ui.pack.js:13591)
    at A.updateChoices (ui.pack.js:13650)
    at A.onComplete (ui.pack.js:13786)
    at Object.oncomplete (framework.pack.js:76)
    at framework.pack.js:2748

Кажется, что конкретный метод в вопросах находится в файле Prototype.js это =>

        if (element._prototypeEventID) return element._prototypeEventID[0];
        arguments.callee.id = arguments.callee.id || 1;
    return element._prototypeEventID = [++arguments.callee.id];
    }

Я ожидаю, что загрузочный виджет исчезнет после сохранения, но он все еще находится на странице. В консоли инструментов разработчика Chrome также есть вторая ошибка:

validateFormCheck @ common.js:1031

1 Ответ

0 голосов
/ 22 июня 2019

Похоже, что метод getEventID вызывается там, где срабатывает предупреждение / ошибка undefined.

В версии 1.6.0.3 getEventID вызывается только в createWrapper и stopObserving,Я вижу, что stopObserving находится в стеке вызовов, который вы разместили, так что давайте продолжим с этим.

stopObserving() принимает 1 обязательный параметр и 2 необязательных параметра (element, eventName, handler), если вы только передаете элемент вфункция ищет его, а затем удаляет все наблюдатели PrototypeJS, прикрепленные к этому элементу.Если вы также передадите eventName и / или обработчик, stopObserving будет только специально удалять наблюдателя, которому вы сообщаете.

При этом, если элемент удаляется из DOM до вызова stopObserving, это может привести кошибка, которую вы видите.

2 исправляет то, что мог работать

  • переместить вызов на stopObserving() над вызовом на remove()
  • закомментируйте вызов stopObserving() и посмотрите, будет ли страница вести себя так, как вы хотите
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...