`
ka_wa_yi
  • 浏览: 23957 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Extjs 完整树 但是有个bug 也许节点很多会出bug 有待调试

    博客分类:
  • Ext
阅读更多
js 文件


/*!
* Ext JS Library 3.0.0
* Copyright(c) 2006-2009 Ext JS, LLC
* licensing@extjs.com
* http://www.extjs.com/license
*/

Ext.onReady(function(){
    var tree = new Ext.tree.TreePanel({
        renderTo:'tree-div',
        title: 'My Task List',
        height: 450,
        width: 600,
        useArrows:true,
        autoScroll:true,
        animate:true,
        enableDD:true,
        containerScroll: true,
        rootVisible: false,
        frame: true,
        root: {
            nodeType: 'async'
        },
       
        dataUrl: 'check-nodes.json',
       
        buttons: [{
            text: 'Get Completed Tasks',
            handler: function(){
                var msg = '', selNodes = tree.getChecked(); // getNode  select return array
                Ext.each(selNodes, function(node){
                    if(msg.length > 0){
                        msg += ', ';
                    }
                    msg += node.text;
                });
                Ext.Msg.show({
                    title: 'Completed Tasks',
                    msg: msg.length > 0 ? msg : 'None',
                    icon: Ext.Msg.INFO,
                    minWidth: 200,
                    buttons: Ext.Msg.OK
                });
            }
        }]
    });
   
    /*  
     * tree.suspendEvents()  方法说明:暂停触发所有的事件
     *  tree.resumeEvents()   方法说明:重新触发事件
     */
   
   
    tree.on('checkchange', function(node, checked) {
node.expand();  // 展开树
    var no = 0;
       // **************当被单击的节点是叶子节点时*******************
       if(node.isLeaf()){
      
       /*
       * 子节点全部选中 , 父节点被选中
       */
       // 选中子节点中的一个选项
       if(node.getUI().isChecked()){
       // 父节点在没被选中的情况下
       if(!node.parentNode.getUI().isChecked()){
       // 遍历子节点的选项
       var num = node.parentNode.childNodes.length;
       //alert('num = '+num);
       node.parentNode.eachChild(function(child){
       // 子节点中有一项未被选中,停止 跳出循环
       if(child.getUI().isChecked()){
       no++;
       }
       });
      
       if(no==num){
       //alert("ok 选中父节点");
       node.parentNode.ui.toggleCheck(true);      
           node.parentNode.attributes.checked = true;
       }
       // 父节点选中情况下不做处理
       }else{
       return;
       }
       }
      
       /*
       * 子节点中有一个未被选中 , 父节点将不被选中
       */
      
       if(!node.getUI().isChecked()){
       //no--;
       if(node.parentNode.text != undefined){
       node.parentNode.ui.toggleCheck(false);      
           node.parentNode.attributes.checked = false;
       }
       }
       }
      
       //  **************当被单击的节点不是叶子节点时*******************
       var i = 0;
       var j = 0;
       // 叶子父节点选中
        if(!node.isLeaf()){
        // 累加
        // 遍历子节点的选项
       var num = node.parentNode.childNodes.length;
       node.parentNode.eachChild(function(child){
       if(child.getUI().isChecked()){
       no++;
   }
   });
if(no==num){
node.parentNode.ui.toggleCheck(true);      
    node.parentNode.attributes.checked = true;
}
       
        // ***************  全选  ****************
        if(node.getUI().isChecked()){
        tree.suspendEvents();  //暂停触发所有事件
checkAll(node,0,0);
        tree.resumeEvents(); //重新出发所有事件
        }
       
       
        // ****************  去选(父节点选项去选)  *******************
        // 叶子父节点的去选情况
       
        if(!node.getUI().isChecked()){
       
        node.eachChild(function(child){
        i++;
        if(child.getUI().isChecked()){
        j++;
        }
        });
        // 表面点击了全部去选
        if(i==j){
        outOfcheck(node,0,0);      // 调用全消的方法
        }
       
        // 判断该节点上面是否还有父节点
        // 1. 有的话 去掉父节点的选项
        if(node.parentNode.text!=undefined){
        //alert('他有父节点');
        if(node.parentNode.getUI().isChecked()){
       
        node.parentNode.ui.toggleCheck(false);      
           node.parentNode.attributes.checked = false;
           return;
           }
        // 2. 没有的话 // 不做处理
        }else{
        //alert('他没有父节点');
        }
        }
       
       
        // 全选的方法
        function checkAll(node,i,j){
     var z = [];
    // 全部选中  Begin
    this.node = node;
node.eachChild(function(child){
j++;
if(!child.getUI().isChecked()){
i++;
if(child.hasChildNodes()){
z.push(child);
}
}
});
if(j>=i){
tree.suspendEvents(); //暂停触发所有事件
node.eachChild(function(child){
if(!child.getUI().isChecked()){
child.ui.toggleCheck(true);
child.attributes.checked = true;
}
});
tree.resumeEvents(); //重新触发所有事件
}
if(z.length>0){
for(var s=0;s<z.length;s++){
checkAll(z[s],0,0);
}
}
// 全部选中  End
    }
   
    // 全部去选的方法
   
    function outOfcheck(node,i,j){
   var z = [];
    // 全部去选  Begin
    this.node = node;
node.eachChild(function(child){
j++;
if(child.getUI().isChecked()){
i++;
if(child.hasChildNodes()){
z.push(child);
}
}
});

if(i==j){
tree.suspendEvents(); //暂停触发所有事件
node.eachChild(function(child){
if(child.getUI().isChecked()){
child.ui.toggleCheck(false);
child.attributes.checked = false;
}
});

tree.resumeEvents(); //重新出发所有事件
}
if(z.length>0){
for(var s=0;s<z.length;s++){
outOfcheck(z[s],0,0);
}
}  
        // 全部去选 End
    }
        }
    });
   
    tree.getRootNode().expand(true); // 找到根节点展开
});



html 文件

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Customizing TreePanel</title>
    <link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
    <!-- Common Styles for the examples -->
    <link rel="stylesheet" type="text/css" href="../shared/examples.css" />
    <link rel="stylesheet" type="text/css" href="../ux/css/ColumnNodeUI.css" />
    <link rel="stylesheet" type="text/css" href="column-tree.css" />
    <!-- GC -->
    <!-- LIBS -->
    <script type="text/javascript" src="../../adapter/ext/ext-base.js"></script>
    <!-- ENDLIBS -->
    <script type="text/javascript" src="../../ext-all.js"></script>
    <script type="text/javascript" src="../code-display.js"></script>

    <script type="text/javascript" src="../ux/ColumnNodeUI.js"></script>
    <script type="text/javascript" src="column-tree.js"></script>
    <!-- EXAMPLES -->
    <script type="text/javascript" src="../shared/examples.js"></script>
</head>
<body>

    <h1>ColumnTree Example</h1>

    <p>Demonstrates extending the native <tt>Ext.tree.TreePanel</tt> and <tt>Ext.tree.TreeNodeUI</tt>
    to display basic columns via the custom <a href="../ux/ColumnNodeUI.js">Ext.ux.tree.ColumnTree</a>
    and <a href="../ux/ColumnNodeUI.js">Ext.ux.tree.ColumnNodeUI</a> classes.</p>
    <p>The js is not minified so it is readable. See <a href="column-tree.js">column-tree.js</a>.</p>

</body>
</html>


josn 文件


[{
id:1001,
    text: 'To Do',
    checked: false,
    cls: 'folder',
    children: [{
        text: 'Go jogging',
        id:100101,
        checked: false,
        children:[{id:10010101,text:'aaa',leaf:true,checked:false},{id:10010102,text:'bbb',leaf:true,checked:false}]
    },{
        text: 'Take a nap',
        id:100102,
        leaf: true,
        checked: false
    },{
        text: 'Climb Everest',
        id:100103,
        leaf: true,
        checked: false
    }]
},{
    text: 'Grocery List',
    id:1002,
    checked: false,
    cls: 'folder',
    children: [{
        text: 'Bananas',
        id:100201,
        leaf: true,
        checked: false
    },{
        text: 'Milk',
        id:100202,
        leaf: true,
        checked: false
    },{
        text: 'Cereal',
        id:100203,
        leaf: true,
        checked: false
    },{
        text: 'Energy foods',
        id:100204,
        checked: false,
        cls: 'folder',
        children: [{
            text: 'Coffee',
            id:10020401,
            leaf: true,
            checked: false
        },{
            text: 'Red Bull',
            id:10020402,
            leaf: true,
            checked: false
        }]
    }]
},{
    text: 'Remodel Project',
    id:1003,
    checked: false,
    cls: 'folder',
    children: [{
        text: 'Finish the budget',
        id:100301,
        leaf: true,
        checked: false
    },{
        text: 'Call contractors',
        id:100302,
        leaf: true,
        checked: false
    },{
        text: 'Choose design',
        id:100303,
        leaf: true,
        checked: false
    }]
}]



分享到:
评论

相关推荐

    ExtJs4.2下拉树(修改版)

    ExtJs4.2没有直接提供下拉树这个组件,但是有例子可以用,文件位置:ext-4.2.1.883\examples\ux\TreePicker.js 但是它有点小毛病吧:默认显示了根节点;达到最小高度时再展开节点,高度不能自动调整。 所以我做了一...

    SSH+extjs+json动态树的搜索

    动态树搜索通常有两种方法:一是通过`expandAll`,这种方法会扩展树的所有节点,然后在前端进行搜索。但这种方法对于大数据量的树来说效率低下,且存在已知的bug。另一种方法是使用`expandPath`,这种方法更高效,...

    extjs4.2 desktop 拓展

    ExtJS 4.2 Desktop 拓展是一个用于构建桌面样式的Web应用程序的框架,它提供了丰富的用户界面组件和交互效果。这个拓展是基于ExtJS 4.2版本,一个非常强大的JavaScript库,用于创建数据驱动、富客户端的Web应用。在...

    Extjs tree实例【源代码】

    本例旨在说明extjs的tree操作,后台操作很简陋。给入门同学一个简单指导。 本例,存在几个明显的bug,但不影响本意,见谅。 需要C#无bug版的同学,请留下邮箱。 最后:祝自己在13年,顺利完成所有计划!

    自定义ExtJS控件之下拉树和下拉表格附

    在ExtJS框架中,经常会使用到的下拉控件一般仅限于官方提供的下拉列表(***boBox),它对于基础的表单输入非常有用。然而,当需要实现更加复杂的用户交互时,例如在选择数据时拥有类似树形结构的下拉或者表格形式的...

    ext4.2 目录树

    在学习ext的过程中花了不少时间,我想很多网友刚开始学习ext的时候肯定会用到tree所以把现有项目的tree操作做了一个demo分享给大家以便学习参考。例子里面包括了对tree增、改、删、拖动、子父节点的选则取消、右键...

    ExtAspNet_v2.3.2_dll

    -修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的Text,则SelectedValue返回值永远是第一个Text的值(feedback:ben.zhou)。 -应用补丁#6593, #6621(feedback:vbelyaev)。 +修正IE7下Grid分页...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack-&gt;AutoPostBack, Event PostBack-&gt;EnablePostBack)。 -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性...

    extjs grid取到数据而不显示的解决

    郁闷 我在鼠标左侧点击tree节点,在右侧创建一个标签页,这个已经能够实现,于是我再在新建的标签页里嵌套一个Grid。 奇怪的问题出现了。。 FF和IE下都没报错。但是Grid就是不显示。本来我以为我代码错误。于是我狂...

    log4Net详解(共2讲)

    如何才能很好地利用目前公认最好的调试工具FireBug发现并解决开发中遇到的各种BUG 国讯OA工作流管理实现基本功能 1、定义任意形式的工作流程 国讯OA强大的自定义功能可以满足企业对复杂工作流程的定义,包括请假...

    Ext.Net.Utilities

    10. **日志记录和调试**:可能包含一些方便的调试和日志记录工具,有助于开发和调试过程中追踪问题。 由于是从源码反编译,这意味着你可能需要具备一定的编程基础,特别是对C#、JavaScript以及Ext.NET框架的理解。...

    基于Extjs的开源控件库ExtAspNet英文版 v3.1.9

    -修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空...

    基于Extjs的开源控件库ExtAspNet中文版 v3.1.9

    -修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空...

    前端开源库-node-klass

    描述中的“节点klass”可能是指这个库提供了一种在JavaScript(在Node.js环境中)中创建和管理类的方法,类似于ExtJS这样的库在客户端JavaScript中的做法。ExtJS是一个广泛使用的前端框架,它提供了丰富的组件和强大...

    mxgraph-eval-1_5_1_11(流程图表编辑)

    EXTJS是一个流行的JavaScript库,提供丰富的组件和布局管理,使得开发者可以轻松创建出专业级别的Web应用界面。通过结合这两者,开发者能够构建出既有美观界面又具备强大图形编辑功能的Web应用。 在“mxgraph-eval-...

    ExtAspNet控件 v3.1.9源码2012825

    -修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空...

Global site tag (gtag.js) - Google Analytics