日期:2014-05-16  浏览次数:20319 次

ExtJS专题-TreePanel
这次我们来学习下ExtJS中的树面板(TreePanel),很多人都说,只是为了树,都要好好学习ExtJS!可见大家对Tree的一往情深。从另一方面来说,Tree这种结构在实际项目中也的确用得相当广泛,所以我们很有必要研究一下它。这次我们完成的树大致上有这样的功能:它的节点是动态异步从后台(存储在数据库中一张电子产品分类表)加载的,节点之间可以拖曳,节点可以编辑,同时还支持右键菜单,而且,它能够和TabPanel结合构成经典的布局方式。呵呵,是不是很强大?!大家已经看到,我们组件的讲解是逐步递推的,所以我们这里也会用到刚学过的GridPanel和TabPanel这些实用的面板。我们看效果先:

好啦,洪哥,我们动手吧!

1.      首先还是主要的显示页面tree.html,这里有两个地方要注意一下,一个是我们引用的JS如果采用GBK的默认编码,浏览器会显示未结束的字符串常量的错误,所以我们一般会修改JS文件的编码方式为UTF-8,或者在导入JS时加上编码字符集。第二个是我们要定义一个显示TreePanel的DIV。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" />
<script type="text/javascript" src="resources/js/ext-base.js"></script>
<script type="text/javascript" src="resources/js/ext-all.js"></script>
<script type="text/javascript" src="resources/js/tree.js" charset="gbk"></script>
</head>
<body>
<div id="tree-panel" style="overflow:auto; height:300px;width:200px;border:2px solid #c3daf9;"></div>
</body>
</html>

2.      然后是我们的主体JS文件,tree.js,为了凸显主题,这个我已经做了必要的简化,还做了详细的注释,大家好好看一下。

Ext.onReady(function() {
    Ext.QuickTips.init();// 浮动信息提示
    Ext.BLANK_IMAGE_URL = 'resources/images/default/s.gif';// 替换图片文件地址为本地

    // 创建一个简写
    var Tree = Ext.tree;
    // 定义根节点的Loader
    var treeloader = new Tree.TreeLoader({
            // dataUrl : 'tree.jsp'//这里可以不需要指定URL,在加载前事件响应里面设置
            });

    // 添加一个树形面板
    var treepanel = new Tree.TreePanel({
        // renderTo:"tree_div",//如果使用renderTo,则不能使用setRootNode()方法,需要在TreePanel中设置root属性。
        el : 'tree-panel',// 将树形添加到一个指定的div中,非常重要!
        region : 'west',
        title : '功能菜单',
        width : 200,
        minSize : 180,
        maxSize : 250,
        split : true,
        autoHeight : false,
        frame : true,// 美化界面
        // width : 200,//面板宽度
        // title : '可编辑和拖动的异步树',//标题
        // autoScroll : true, // 自动滚动
        enableDD : true,// 是否支持拖拽效果
        containerScroll : true,// 是否支持滚动条
        rootVisible : true, // 是否隐藏根节点,很多情况下,我们选择隐藏根节点增加美观性
        border : true, // 边框
        animate : true, // 动画效果
        loader : treeloader
            // 树加载
        });
    // 异步加载根节点
    var rootnode = new Tree.AsyncTreeNode({
                id : '0',
&n