2

我创建了一个包含发送 ajax 请求的网格的窗口。现在,在完全创建网格并返回 ajax 请求之前,我立即再次关闭窗口。

我有两个问题:

  • 窗口被销毁后,我在窗口中的组件仍然“活动”

Chrome 控制台列出了它们。虽然我的窗口有autoDestroy: true网格面板和商店在窗口关闭后仍然存在。关闭时,destroy触发事件。文档说,窗口下的所有组件都应该被销毁。

  • 然后我的回调最终返回并被执行,但窗口被破坏

问题是,回调尝试重新配置没有附加存储的网格。

错误Uncaught TypeError: Cannot call method 'getCount' of null Table.js:500:(/lib/extjs/src/view/Table.js

如果我的窗口被破坏,如何停止处理回调?

4

1 回答 1

5

向mon注册事件,以便在侦听对象被销毁时将其删除。或者,您可以:

  • 在 destroy() 方法中手动删除它们
  • 在回调中检查可能不存在的方法或属性以跳过它们

编辑

还有一些你可以做的事情

  1. 检查网格的 destroy() 方法是否被调用
  2. 通过调用Ext.Ajax.abortAll()中止所有请求(在窗口关闭之前)
  3. 通过调用Ext.Ajax.abort(request)中止特定的请求(在窗口关闭之前)

我建议使用选项 2。因为它应该是最安全的。

编辑 2

要查看所有正在运行的请求,您需要查看来自哪个扩展的私有requests属性。是 object 类型,将包含当前正在运行的每个请求的属性(请求 Id)。Ext.data.ConnectionExt.Ajaxrequests

于 2013-07-11T11:02:07.210 回答