在一个目录层次比较多的Tree中,一次性构造一棵树,不是一个好的实践,因为那样在Tree加载时,会耗用过多的时间,所以,利用异步的方式构建Tree就显得重要了。
Ext.tree.TreePanel从机制上,提供了异步加载的机制,通过对‘beforeload’事件的响应:
var treeUrl ='url'; new Ext.tree.TreePanel({ ... root : new Ext.tree.AsyncTreeNode({ id:'root' }), listeners : { 'beforeload':function(node){ if(node.id == 'root') { tree.loader.dataUrl=treeUrl; } else {//Url和需要的参数 tree.loader.dataUrl=treeUrl+'?id='+node.id+'&text='+encodeURI(encodeURI(node.text));// } } } });
ExtJS会自动的处理这个事件的调用:当TreeNode的leaf属性为false,第一次打开时,就调用所定义的url,加载下级数据,且这个数据只加载一次。