ExtJS 4奇怪的树加载行为

时间:2012-08-26 08:29:48

标签: javascript extjs extjs4.1

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

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

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

  1. 用户在网格上选择一些内容,这会导致树发送请求
  2. 在上一个请求完成之前,用户更改了导致发送新请求的内容
  3. 在两个请求完成后扩展节点时,树开始出现问题
  4. 我有办法在重新加载树之前中止树存储发送的所有待处理请求吗?

    提前感谢您的帮助! Amitay。

    P.S - ExtJS 4.1.1版

1 个答案:

答案 0 :(得分:1)

将数据添加到树存储是一项棘手的工作。该框架执行许多操作,以便在每次将数据加载或加载到树存储中时保持对齐。例如,尝试将记录添加到树存储中,该存储已存在于其他位置的树中。如果记录的ID是持久的(意味着从服务器设置),那么所有的记录都会松动。这是因为树存储具有复杂的机器并且可能不适合所有用例。

所以难怪如果两个竞争请求尝试将数据加载到树存储中,事情将无法正常工作。 可以做些什么?

  1. 加载蒙版。扩展树分支时,加载掩码应覆盖树以隐藏任何其他控件。这有助于避免并发数据操作。在4.1.1中,这实际上有效OOTB(以前被打破过)。

  2. 如果您允许外部控件影响树,请查看“loading”属性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这将终止所有其他待处理请求,可能就是您要查找的内容。