<script type="text/javascript"> var Tree = Ext.tree; var tree = null; Ext.onReady(function(){ tree = new Tree.TreePanel({ el:'tree-div', onlyLeafCheckable:false, rootVisible: true, autoScroll:true, animate:false,//是否动画 enableDD:true,// 是否支持拖放 containerScroll:true, lines:true, checkModel:'cascade', loader:new Tree.TreeLoader({dataUrl:"json.jsp", baseAttrs: {uiProvider: Ext.tree.TreeCheckNodeUI} }) }); // set the root node var root = new Tree.AsyncTreeNode({ text: '常量科目维护', id:'root' }); //绑定节点追加事件 tree.on('append', function(tree, node){ //if(node.id == 'foo'){ // alert("append"); // } }); //绑定节点切换事件 tree.getSelectionModel().on('selectionchange', function(sm, node){ // alert("selectionchange"); }); //绑定节点点击事件 tree.on('click', function(node){ if(node.id!='root'){ alert(node.id); alert(node.text); } }); //绑定节点加载之前事件 tree.on('beforeload',function(node){ if(node.id!='root'){ // alert("beforeload");; } }); //绑定节点右键菜单功能 tree.on('contextmenu',function(node,event){ // alert("node.id="+ node.id); event.preventDefault(); //这行是必须的 rightClick.showAt(event.getXY());//取得鼠标点击坐标,展示菜单 }); //绑定节点拖动事件,找了很久树节点拖动的实现,终于在老外的帖子发现上了这个实现,拖动以后所需的信息已经捕获,与后台联动的函数 加上即可实现TREE的拖拽 function handleMoveNode(tree, node, oldParent, newParent, index) { alert("鼠标拖拽事件"); alert("node.attributes.id = " + node.attributes.id +"\n" + "node.parentNode.attributes.id = " + node.parentNode.attributes.id ) alert("newParent.attributes.id = " + newParent.attributes.id); alert("oldParent.attributes.id = " + oldParent.attributes.id); } tree.addListener('movenode', handleMoveNode); tree.addListener('beforemovenode', function(t,node,oldParent,newParent,i) { if(oldParent.id == newParent.id ) { alert("Re-ordering not supported"); return false; } }); //定义右键菜单 var rightClick = new Ext.menu.Menu({ id :'rightClickCont', items : [{ id:'rMenu1', text : '菜单1', //增加菜单点击事件 handler:function (){ alert('我被点击了!'); } }, { id:'rMenu2', text : '菜单2' }, { id:'rMenu3', text : '菜单3' }] }); tree.setRootNode(root); // render the tree tree.render(); root.expand(); }); </script>