【问题标题】:How to handle incoming ajax requests after destroying window?销毁窗口后如何处理传入的ajax请求?
【发布时间】:2013-07-11 10:33:31
【问题描述】:

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

我有两个问题:

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

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

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

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

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

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

【问题讨论】:

    标签: extjs extjs4.1


    【解决方案1】:

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

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

    编辑

    你可以做更多的事情

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

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

    编辑 2

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

    【讨论】:

    • 谢谢。在那个主要观点中,我有很多孩子。难道没有别的办法了吗?试过view.removeAll()
    • 谢谢。 abortAll 看起来很棒。我会看看它。但是我必须知道一直有什么请求......:/
    • @Indianer 没错。但是您可以获取有关当前正在运行的请求数量的信息,请参阅我的编辑。
    猜你喜欢
    • 2015-10-11
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多