2012-08-26 58 views
0

我有一个使用ajax商店的树面板。 当服务器获取节点的结果时,通常不是即时的(需要几秒钟)。ExtJS 4奇怪的树加载行为

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

这可能导致奇怪的行为,当该前一个完成之前被发送的请求:

  1. 用户选择在网格上,这会导致树发送请求
  2. 以前的请求之前的东西是完整的用户改变一些东西,导致一个新的请求被发送
  3. 树开始有问题,当在两个请求完成后扩展节点

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

在此先感谢您的帮助! Amitay。

P.S - ExtJS的版本4.1.1

+0

因此,树的内容可能与不同的数据被重新加载,而在之前的数据服务器请求正在进行。这是你想要阻止的吗?你能解释为什么你重新加载根节点? – Izhaki

+0

这实际上是一个树形网格(不是简单的树)。我将它用于我的应用程序中的仪表板,其中显示了各种指标。感谢树,用户可以深入查看详细的数据。当用户选择要显示的度量标准时,应该重新加载树来反映用户的选择。 当用户选择一些内容并在先前完成加载之前更改其选择时,会发生此问题。 – amitayh

回答

1

将数据添加到树商店是一个棘手的业务。为了在每次将数据加载或加载到树存储中时保持对齐,框架会执行很多操作。作为示例,尝试将记录添加到其他地方树中已存在的树存储中。如果记录的ID是持久的(意味着从服务器设置),那么所有的记录都会丢失。这是因为树木商店机器复杂,可能不适合所有用例。

因此,难怪如果两个相互竞争的请求尝试将数据加载到树存储中,情况将不会很好。 可以做些什么?

  1. 加载蒙版。当树分支展开时,加载蒙版应覆盖树以隐藏任何其他控件。这有助于避免并发数据操作。在4.1.1中,这实际上起作用了OOTB(之前被破解)。

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

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

+0

嗨德米特里,谢谢你的回复。 1。这将起作用 - 但我不想限制用户。我宁愿放弃树发送的所有请求。我无法找到跟踪这些请求的方法。 2.是的,我想要使用'abort'方法 - 但是,我找不到方法来访问我要中止的请求!有什么建议么? 3.这将杀死所有请求,不是吗? (不只是与树木店有关的) 再次感谢您的协助,Amitay。 – amitayh