ExtJS 4 奇怪的树加载行为

Posted

技术标签:

【中文标题】ExtJS 4 奇怪的树加载行为【英文标题】:ExtJS 4 weird tree loading behavior 【发布时间】:2012-08-26 08:29:48 【问题描述】:

我有一个使用 ajax 存储的树面板。 当服务器获取节点的结果时,通常不是即时的(需要几秒钟)。

我有另一个网格控件,它重新加载根节点(取决于不同的参数)

如果在前一个请求完成之前发送请求,这可能会导致奇怪的行为:

    用户在网格上选择了一些东西,这会导致树发送请求 在上一个请求完成之前,用户更改了一些内容,导致发送新请求 两个请求完成后扩展节点时树开始出现问题

有没有办法让我在重新加载树之前中止树存储发送的所有待处理请求?

提前感谢您的帮助! 阿米泰。

P.S - ExtJS 版本 4.1.1

【问题讨论】:

因此,当服务器对先前数据的请求正在进行时,树的内容可能会用不同的数据重新加载。这是您要防止的吗?你能解释一下为什么要重新加载根节点吗? 这实际上是一个树形网格(不是简单的树)。我将它用于我的应用程序中的仪表板,其中显示了各种指标。多亏了树,用户可以向下钻取以详细查看数据。当用户选择要显示的指标时,应重新加载树以反映用户的选择。当用户选择某些内容并在前一个完成加载之前更改他的选择时,就会出现问题。 【参考方案1】:

将数据添加到树存储是一项棘手的工作。该框架在每次加载或加载数据到树存储时都会做很多事情来保持对齐。例如,尝试将记录添加到已存在于其他地方的树中的树存储中。如果记录的 id 是持久的(意思是从服务器设置),那么一切都会松散。这是因为树店有复杂的机器,可能不适合所有用例。

因此,如果两个相互竞争的请求尝试将数据加载到树存储中,这将无法正常工作,这也就不足为奇了。 可以做什么?

    加载掩码。当树枝展开时,加载掩码应覆盖树以隐藏任何其他控件。这有助于避免并发数据操作。在 4.1.1 中,这实际上适用于 OOTB(之前被破坏)。

    如果您允许外部控件影响树,请查看“加载”属性 http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Store-property-loading。检查加载应防止其他操作继续进行。如果需要,可以在数据连接上使用“中止”方法来取消挂起的请求。

    最后查看数据连接上的 autoAbort 属性:http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Connection-cfg-autoAbort 这将杀死所有其他待处理的请求,可能就是您要查找的内容。

【讨论】:

您好,德米特里,感谢您的回复。 1. 这会起作用 - 但我不想限制用户。我宁愿中止树发送的所有请求。我找不到跟踪这些请求的方法。 2. 是的,我想使用“中止”方法——但是,我找不到访问我试图中止的请求的方法!有什么建议么? 3. 这会杀死所有请求,不是吗? (不仅仅是与树店相关的)再次感谢您的帮助,Amitay。

以上是关于ExtJS 4 奇怪的树加载行为的主要内容,如果未能解决你的问题,请参考以下文章

Extjs 加载图标

extjs 3 store 加载新记录,同时保留以前的记录

ExtJS 3.4 - 设置加载

ExtJS 4 添加加载图标

Extjs 4 treepanel 重新加载和展开

Extjs 4.2 加载名称为 [] 的表单数据