问题描述
ext tree中有个expandAll的方法,怎么样知道全部展开完成呢treeloader里面可以通过url配置tree的数据源,那么在js中怎么样才能得到那个json字符串呢(只加载一次) 问题补充:只加载一次不是说只有一层,tree有很多层的,根节点expand后没有用的,估计还要2秒多才能展开完成,我说的是展开完成,数据加载了,展开才刚开始在load事件或者根节点中使用getNodeById(""),这个id如果是比较深层的节点是会报错的,只能等全部展开完才能我的本意是tree的数据到了,不要等它展开完成,就能通过id取得tree节点的text
解决方案
既然你的树数据只加载一次,也就是说只请求一次根节点,所有的节点数据都一次性全加载下来,那么可以在根节点的expand事件响应后,延后1毫秒执行,这时肯定都展开完毕(前提是未开启动画)。因为往后的所有节点加载都是本地进行了,会在一个JS任务内执行完毕,而不像ajax那样设定回调后中止,请求结束后重新执行。延后1毫秒的话,一定会在全部展开后才执行它。(参考JavaScript单线程性质及执行队列)tree.getRootNode().on("expand", function(){}, scope, {single:true, delay:1});想要取得那个json字串,只能重写TreeLoader了,稍微扩展下:var xxx = new Ext.tree.TreePanel({ ... loader : new Ext.tree.TreeLoader({ handleResponse : function(response){ // 自己处理response.responseText Ext.tree.TreeLoader.prototype.handleResponse.apply(this, arguments); } }), ...});