我有一个使用 ajax 商店的树面板。当服务器获取节点的结果时,通常不是即时的(需要几秒钟)。
我有另一个网格控件,它重新加载根节点(取决于不同的参数)
如果在前一个请求完成之前发送请求,这可能会导致奇怪的行为:
- 用户在网格上选择某些东西,这会导致树发送请求
- 在前一个请求完成之前,用户更改了一些导致发送新请求的内容
- 两个请求完成后扩展节点时树开始出现问题
有没有办法让我在重新加载树之前中止树存储发送的所有待处理请求?
在此先感谢您的帮助!阿米泰。
PS - ExtJS 版本 4.1.1
我有一个使用 ajax 商店的树面板。当服务器获取节点的结果时,通常不是即时的(需要几秒钟)。
我有另一个网格控件,它重新加载根节点(取决于不同的参数)
如果在前一个请求完成之前发送请求,这可能会导致奇怪的行为:
有没有办法让我在重新加载树之前中止树存储发送的所有待处理请求?
在此先感谢您的帮助!阿米泰。
PS - ExtJS 版本 4.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这将杀死所有其他未决请求,可能成为你正在寻找的东西。