2013-07-11 61 views
2

我创建了一个包含发送Ajax请求的网格的窗口。现在,我在网格完全创建并且返回ajax请求之前立即关闭窗口。如何在销毁窗口后处理传入的ajax请求?

我有两个问题:

  • 我的一个窗口内的部件仍然“活着”的窗口被销毁

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

  • 然后我的回调终于回归并得到执行,但窗户被破坏

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

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

如何才能停止从处理的回调,如果被破坏了我的窗前

回答

5

注册与mon这样的事件时,监听对象被摧毁,他们移除。或者,您可以:

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

编辑

有一些更多的东西,你可以做

  1. 检查,如果破坏( )网格的方法被称为
  2. 通过调用Ext.Ajax.abortAll()(在窗口关闭之前)中止所有请求
  3. 通过调用Ext.Ajax.abort(request)(窗口关闭前)

我建议使用选项2,因为它应该是最安全的中止只是具体requestst。

编辑2

要看看你需要看的Ext.data.Connection私有财产requestsExt.Ajax延长所有正在运行的请求。 requests是对象类型,并且将包含当前正在运行的每个请求的属性(请求Id)。

+0

谢谢。在这个主要观点中,我有很多孩子。没有其他办法吗?试过'查看。removeAll()' – Patrick

+0

@Indianer看到我的编辑 – sra

+0

谢谢。 'abortAll'看起来很棒。我会看看它。不过,我必须知道所有时间都有什么请求......:/ – Patrick