如何在销毁窗口后处理传入的ajax请求?

时间:2013-07-11 10:33:31

标签: extjs extjs4.1

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

我有两个问题:

  • 在窗口被销毁后,窗口中的组件仍处于“活动状态”

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

  • 然后我的回调终于返回并执行但窗口被销毁

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

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

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

1 个答案:

答案 0 :(得分:5)

使用 mon 注册事件,以便在侦听对象被销毁时删除它们。或者你可以:

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

修改

还有一些你可以做的事情

  1. 检查网格的destroy()方法是否被调用
  2. 通过致电 Ext.Ajax.abortAll() (在关闭窗口之前)中止所有请求
  3. 通过致电 Ext.Ajax.abort(request) (在关闭窗口之前)中止具体请求
  4. 我建议使用选项2.因为它应该是最安全的。

    修改2

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