Grid 编辑网格中的值后,工具提示将被破坏;s单元-ExtJS6

Grid 编辑网格中的值后,工具提示将被破坏;s单元-ExtJS6,grid,tooltip,editor,cell,extjs6,Grid,Tooltip,Editor,Cell,Extjs6,我们在ExtJS网格中遇到了一个微妙的问题。 它是一个非常普通的网格,带有标准的“cell editor”插件和两个可编辑列(至少有两个是很重要的)。 提交可编辑单元格后,将重新加载支持网格的存储。 但是,网格重新加载会在后续的时间段中进行,因为它是异步任务完成的一部分 除非用户使用Tab键而不是Enter键提交可编辑单元格,否则所有这些都可以正常工作。选项卡使第二列的单元格编辑器可见,并将输入焦点转移到该列。之后商店会重新加载,或者至少我相信它会在之后发生 乍一看,UI没有发生什么不好的事情,

我们在ExtJS网格中遇到了一个微妙的问题。 它是一个非常普通的网格,带有标准的“cell editor”插件和两个可编辑列(至少有两个是很重要的)。 提交可编辑单元格后,将重新加载支持网格的存储。 但是,网格重新加载会在后续的时间段中进行,因为它是异步任务完成的一部分

除非用户使用Tab键而不是Enter键提交可编辑单元格,否则所有这些都可以正常工作。选项卡使第二列的单元格编辑器可见,并将输入焦点转移到该列。之后商店会重新加载,或者至少我相信它会在之后发生

乍一看,UI没有发生什么不好的事情,它仍然像往常一样工作。但是,一段时间后,尝试将鼠标悬停在附加工具提示的任何元素上会导致崩溃,并且控制台会被错误淹没

我们已经找到了造成这种情况的直接原因:网格重新加载之后的垃圾收集周期将属于第二列编辑器的输入字段视为垃圾。因此,
Ext.Element
包装此字段的实例的
dom
属性被擦除。就其本身而言,这似乎不是一个问题。但是,出于某种原因,当显示工具提示时,系统会尝试获取以前被垃圾收集的
元素。奇怪的是,该元素与工具提示无关

为了复制此内容,请打开

  • 双击第一列中的任意单元格以使其可编辑
  • 键入任何值
  • 按键盘上的Tab键
  • 等30秒
  • 将鼠标移动并悬停在网格单元上可查看工具提示
它不需要是网格工具提示,即使鼠标悬停在具有工具提示的任何无关UI元素上,错误也会同样发生


所以问题是:垃圾收集元素如何被重用,以及如何纠正这一点?

我不能告诉您如何解决它,但这是因为出于性能原因,ExtJS缓存组件查询。组件应该在销毁时从缓存中删除-如果没有,缓存会中断,因为它在取消引用组件之前不会检查组件是否已销毁。这通常发生在浮动组件未正确清理时。在这种特殊情况下,似乎是编辑时重新加载存储区造成的;在处理过程中激发的事件将销毁关联的网格行及其输入单元格,但您的工具提示仍在其上方悬停,并且不知道输入单元格已销毁。您可能想尝试销毁提示并重新创建它。@RobertWatkins关于缓存,我们得出了相同的结论,实际上,缓存的项似乎已被垃圾回收,并且仍保留在缓存中。在此过程中,我在网格工具栏上添加了一个简单的工具提示按钮,以清楚地演示此问题。@Mooh-缓存的是inputfield,而不是工具提示。只是使用工具提示会触发一个查询来解决问题。潜在的错误是,当行被销毁并重新创建时,输入字段没有被正确清理。