Подсказка становится неработоспособной после редактирования значения в ячейке сетки - ExtJS6 - PullRequest
2 голосов
/ 03 февраля 2020

Мы столкнулись с тонкой проблемой с сеткой Ext JS. Это довольно регулярная сетка со стандартным плагином «редактор ячеек» и двумя редактируемыми столбцами (важно иметь как минимум два). После отправки редактируемой ячейки магазин, поддерживающий сетку, перезагружается. Однако перезагрузка сетки происходит в последующем временном интервале, потому что это часть асинхронного завершения задачи.

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

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

Нам удалось установить sh непосредственную причину this: цикл сборки мусора, который следует за перезагрузкой сетки, обрабатывает поле ввода, принадлежащее редактору второго столбца, как мусор. В результате Ext.Element экземпляр обтекания этого поля стирает свойство dom. Само по себе это, похоже, не проблема. Однако по какой-то причине, когда появляется подсказка, система пытается заполучить Element, который был ранее собран. Как ни странно, этот элемент не имеет никакого отношения к всплывающим подсказкам.

Чтобы воспроизвести это, откройте fiddle , а затем

  • Дважды щелкните любую ячейку в первый столбец, чтобы сделать его редактируемым
  • Введите любое значение
  • Нажмите клавишу Tab на клавиатуре
  • Подождите 30 секунд
  • Наведите и наведите указатель мыши на ячейки сетки для просмотра всплывающих подсказок

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

Поэтому вопрос таков: как это может быть, что собранный мусор элемент используется повторно, и как это исправить?

...