分享

ExtJs树控件制作

 小叶子MM 2009-06-10

如果通过js生成树,可以用dtree

dtree是一个免费的javascript脚本,只需定义有限的几个参数,就可以做出漂亮的树型菜单。下载目录:http://www./javascripts/tree/

以下是 extjs树制作说明:

一.动态树制作

关于extjs tree使用,主要是配合TreePanel,AsyncTreeNode,TreeNode,TreeLoader几个配合

可以通过用TreeLoader加载数据生成树

如果要做ExtJS Tree的DEMO,生成TreeLoader()时,尽量不要使用静态的JSON格式文件。

 如: Tree.TreeLoader({dataUrl:'/jsondata.txt'});

      Tree.TreeLoader({dataUrl:'/jsondata.js'});  

下载JSON-lib,地址:http://json-lib./

JSON所需包:

Json-lib requires (at least) the following dependencies in your classpath:

    jakarta commons-lang 2.3

      jakarta commons-beanutils 1.7.0

      jakarta commons-collections 3.2

      jakarta commons-logging 1.1.1

      ezmorph 1.0.4

下载地址

 commons 下载地址:http://commons./

ezmorph 下载地址:http://ezmorph.

简单例子:
Ext.onReady(function(){
    
    var Tree Ext.tree;
   
    var tree new Tree.TreePanel({
        el:'tree-div',
        autoScroll:true,
        animate:true,
        enableDD:true,
        containerScroll: true,
        loader: new Tree.TreeLoader({
            dataUrl:'http://localhost:8080/lab/menus.action'//通过指定类转化成json格式字符串,访//问特定的jsp页面取得字符串 <%=jsonstring %>
        })
    });

    // set the root node
    var root new Tree.AsyncTreeNode({
        text: 'Ext JS',
        draggable:false,
        id:'source'
    });
    tree.setRootNode(root);

    // render the tree
    tree.render();
    root.expand();
});

补充说明:

TreePanel,这是Ext中用来显示树结构的控件,该控件可以通过一个url来加载树的节点信息,并支持异步树节点加载方式。看下面使用TreePanel的代码:

var root=new Ext.tree.AsyncTreeNode(...{
id:"root",
text:"树的根"});
var tree=new Ext.tree.TreePanel(...{
renderTo:"hello",
root:root,
loader: new Ext.tree.TreeLoader(...{url:"treedata.js"}),

//通常url: 'http://localhost:8080/lab/menus.action'
//或'tree.jsp?DID=1',  jsp通过处理类调用 <%=处理后的JSON格式字符串%>

//通过net.sf.json.JSONArray, com.tree.JSONTreeNode结合数据库转换成所需要的

//JSON格式字符串

width:100
});

  在代码中,treedate.js表示服务器的程序,Ext在渲染这棵树,需要加载树节点的时候会向服务器发起一个请求,通过这个请求的返回结果来加载树的节点信息。默认情况下Ext要求服务器端返回的是一个包含树节点信息的JSON数组,格式如下:
  [{节点对象1},{节点对象2}]
比如treedata.js中可以包含下面的数据:

[...{
id: 1,
text: '子节点1',
leaf: true
},...{
id: 2,
text: '儿子节点2',
children: [...{
id: 3,
text: '孙子节点',
leaf: true
}]
}]
 

二.静态树制作

不必使用TreeLoader加载,将extjs包放到当前html同级目录下,改名extjs,代码如下:

<html>

  <head>

  <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" />

  <script type="text/javascript" src="extjs/adapter/ext/ext-base.js"></script>

  <script type="text/javascript" src="extjs/ext-all.js"></script>

 <!-- <SCRIPT src="jsontreetest.js" type=text/javascript></SCRIPT>-->

  </head>

  <body>

     <div id="tree-div" style="overflow:auto; height:300px;width:200px;border:2px solid #c3daf9;"></div>

  </body>

</html>

 

<script>

Ext.onReady(function(){

 

    Ext.QuickTips.init();

 

    var mytree=new Ext.tree.TreePanel({

 

      el:"tree-div",

      animate:true,////展开,收缩动画,false时,则没有动画效果

      title:"Extjs静态树",

      collapsible:true,//可折叠

      enableDD:true,//不仅可以拖动,还可以通过Drag改变节点的层次结构

      enableDrag:true,//树的节点可以拖动Drag

      rootVisible:true,

      autoScroll:true,

      trackMouseOver:false,//false则mouseover无效果

      //useArrows:true,//小箭头

      autoHeight:true,

      width:150,

      lines:true //节点间的虚线条

      //loader : new Tree.TreeLoader( {////加载节点数据

            //  dataUrl : 'OrgTreeJsonData.action'

           //就是要动态载入数据的请求地址,这里请求时会提交一数为node的值,值为root即new Tree.AsyncTreeNode()对象的id值

     // })

 

  });

 

  //根节点

  var root=new Ext.tree.TreeNode({

      id:"root",

      text:"控制面板",

      expanded:true

  });

 //第一个子节点及其子节点

  var sub1=new Ext.tree.TreeNode({

      id:"news",

      text:"新闻管理",

      singleClickExpand:true

 

  });

 

  sub1.appendChild(new Ext.tree.TreeNode({

      id:"addNews",

      text:"添加新闻",

      href:"http://www.baidu.com",

      hrefTarget:"mainFrame",

      qtip:"打开百度",//qtip:"提示"//提示信息,不过要 Ext.QuickTips.init();下

      listeners:{//监听

          "click":function(node,e){

               alert(node.text)

          }

      }

 

  }));

 

  sub1.appendChild(new Ext.tree.TreeNode({

      id:"editNews",

      text:"编辑新闻"

  }));

 

  sub1.appendChild(new Ext.tree.TreeNode({

     id:"delNews",

     text:"删除新闻"

  }));

 

 root.appendChild(sub1);

 

 root.appendChild(new Ext.tree.TreeNode({

     id:"sys",

     text:"系统设置"

 }));

 

 mytree.setRootNode(root);//设置根节点

 

 mytree.render();//不要忘记render(),否则不显示

 

})

</script>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多