在Extjs中使用treepanel时,我们常常会期望点击树节点旁边的加号 “+” 来展开这个节点(这个节点不一定是Treepanel当前选中的节点)。
我们需要对beforeexpandnode或者expandnode事件编程。以下以beforeexpandnode为例,描述该事件的使用方法:
- listeners : {
- 'beforeexpandnode' : function(node, deep, animal) {
- if (node != null || node.id != "top_root")
- {
- logicTreeLoader.dataUrl = 'RetrieveData?webAction=getTreeNode&domainID='
- + Ext.ComponentMgr.get('cbdomain').getValue()
- + "&parentID="+ node.text;
- logicTreeLoader.load(node);
- }
- }
- }
beforeexpandnode事件带有三个参数:node :当前节点,这个节点不是treepanel当前选中的节点,而是要展开的节点(被点 "+" 所在位置的节点);deep:从字面上看是深度的意思,不过这是一个bool变量,目前我还不知道做什么用;animal:也是一个bool变量,意思是开启节点展开的动画。
以上代码的意思是:在节点展开之前
1、if (node != null || node.id != "top_root") //判断当前要展开的节点不为空,或者当前要展开节点id不是“top_root”(我定义的根节点id)。
2、设置treepanel 的loader 。这里将node.text通过dataUrl传给后台服务程序。
3、异步调用该节点。
注意:如果如上面所示,当前是一个异步的树, treePanel.load(node); 和 node.expand(); 不要一起使用。因为在异步的情况下,如果node没有获取子节点数据,expand方法本身就会调用treePanel.load(node);。如果一起使用,前端脚本会发出两个相同的请求。