Мы столкнулись с тонкой проблемой с сеткой Ext JS. Это довольно регулярная сетка со стандартным плагином «редактор ячеек» и двумя редактируемыми столбцами (важно иметь как минимум два). После отправки редактируемой ячейки магазин, поддерживающий сетку, перезагружается. Однако перезагрузка сетки происходит в последующем временном интервале, потому что это часть асинхронного завершения задачи.
Все это работает хорошо, если пользователь не отправляет редактируемую ячейку клавишей Tab, а не Enter. Tab делает видимым редактор ячеек второго столбца и смещает фокус ввода там После этого магазин перезагружается, или, по крайней мере, я думаю, что это произойдет потом.
На первый взгляд, ничего плохого не происходит с пользовательским интерфейсом, он продолжает работать как обычно. Однако после некоторого времени попытка навести указатель мыши на любой элемент, к которому прикреплена всплывающая подсказка, вызывает cra sh, и консоль заполняется ошибками.
Нам удалось установить sh непосредственную причину this: цикл сборки мусора, который следует за перезагрузкой сетки, обрабатывает поле ввода, принадлежащее редактору второго столбца, как мусор. В результате Ext.Element
экземпляр обтекания этого поля стирает свойство dom
. Само по себе это, похоже, не проблема. Однако по какой-то причине, когда появляется подсказка, система пытается заполучить Element
, который был ранее собран. Как ни странно, этот элемент не имеет никакого отношения к всплывающим подсказкам.
Чтобы воспроизвести это, откройте fiddle , а затем
- Дважды щелкните любую ячейку в первый столбец, чтобы сделать его редактируемым
- Введите любое значение
- Нажмите клавишу Tab на клавиатуре
- Подождите 30 секунд
- Наведите и наведите указатель мыши на ячейки сетки для просмотра всплывающих подсказок
Это не обязательно должна быть всплывающая подсказка в виде сетки, ошибка также возникает, даже если мышь наводит курсор на любой не связанный элемент пользовательского интерфейса со всплывающими подсказками.
Поэтому вопрос таков: как это может быть, что собранный мусор элемент используется повторно, и как это исправить?