`
chenxueyong
  • 浏览: 342085 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Ext CheckTreeNode Example

阅读更多

实例:


实例是模仿dhtmlxTree的
在render中主要添加了这一行'<img src="', a.isCheck ? "/images/tc/iconCheckAll.gif" : "/images/tc/iconUnCheckAll.gif",'" class="x-tree-ec-icon">',
再获取这个节点 this.ckNode = cs[2];
在initEvents中添加该节点的事件:
E.on(this.ckNode, "click", this.ckClick, this, true);
很简单!

Java代码 复制代码
  1. Ext.tree.TreeNodeUI.prototype.initEvents = function(){   
  2.         this.node.on("move"this.onMove, this);   
  3.         var E = Ext.EventManager;   
  4.         var a = this.anchor;   
  5.         var el = Ext.fly(a);   
  6.         if(Ext.isOpera){ // opera render bug ignores the CSS   
  7.             el.setStyle("text-decoration""none");   
  8.         }   
  9.         el.on("click"this.onClick, this);   
  10.         el.on("dblclick"this.onDblClick, this);   
  11.         el.on("contextmenu"this.onContextMenu, this);   
  12.         var icon = Ext.fly(this.iconNode);   
  13.         icon.on("click"this.onClick, this);   
  14.         icon.on("dblclick"this.onDblClick, this);   
  15.         icon.on("contextmenu"this.onContextMenu, this);   
  16.         E.on(this.ecNode, "click"this.ecClick, thistrue);   
  17.         E.on(this.ckNode, "click"this.ckClick, thistrue);   
  18.         if(this.node.disabled){   
  19.             this.addClass("x-tree-node-disabled");   
  20.         }   
  21.         if(this.node.hidden){   
  22.             this.addClass("x-tree-node-disabled");   
  23.         }   
  24.         var ot = this.node.getOwnerTree();   
  25.         var dd = ot.enableDD || ot.enableDrag || ot.enableDrop;   
  26.         if(dd && (!this.node.isRoot || ot.rootVisible)){   
  27.             Ext.dd.Registry.register(this.elNode, {   
  28.                 node: this.node,   
  29.                 handles: [this.iconNode, this.textNode],   
  30.                 isHandle: false  
  31.             });   
  32.         }   
  33.     };   
  34.        
  35.     Ext.tree.TreeNodeUI.prototype.ckClick = function(e){   
  36.         if(!this.animating && this.node.hasChildNodes()){   
  37.             this.node.expand();   
  38.         }   
  39.         this.updateCheckIcon();   
  40.     };   
  41.        
  42.     Ext.tree.TreeNodeUI.prototype.updateCheckIcon = function(){   
  43.         if(this.node.attributes.isCheck)   
  44.         {         
  45.             this.ckNode.src="/images/tc/iconUnCheckAll.gif";   
  46.             this.node.attributes.isCheck=false;   
  47.             this.updateFCUNCheckIcon(this.node.parentNode);//只能放在上一句的后面   
  48.             this.updateCCUNCheckIcon(this.node.childNodes);   
  49.         }   
  50.         else  
  51.         {   
  52.             this.ckNode.src="/images/tc/iconCheckAll.gif";   
  53.             this.node.attributes.isCheck=true;   
  54.             this.updateFCheckIcon(this.node.parentNode);//只能放在上一句的后面   
  55.             this.updateCCheckIcon(this.node.childNodes);//只能放在上一句的后面   
  56.         }   
  57.     };   
  58.        
  59.     //更新父接点为选种   
  60.     Ext.tree.TreeNodeUI.prototype.updateFCheckIcon = function(pn){   
  61.         if(pn!=null)   
  62.         {   
  63.             pn.attributes.isCheck=true;   
  64.             pn.ui.ckNode.src="/images/tc/iconCheckAll.gif";   
  65.             this.updateFCheckIcon(pn.parentNode);   
  66.         }   
  67.     }   
  68.     //更新子节点为选种   
  69.     Ext.tree.TreeNodeUI.prototype.updateCCheckIcon = function(cn){   
  70.         if(cn!=null)   
  71.         {   
  72.            for(var i=0;i<cn.length;i++)   
  73.             {   
  74.                 cn[i].attributes.isCheck=true;   
  75.                 cn[i].ui.ckNode.src="/images/tc/iconCheckAll.gif";   
  76.                 if(cn[i].hasChildNodes()){   
  77.                     cn[i].expand();   
  78.                     var temp=cn[i].childNodes;   
  79.                     this.updateCCheckIcon(cn[i].childNodes);   
  80.                 }   
  81.             }    
  82.         }   
  83.     }   
  84.        
  85.     //更新父接点为不�?�?   
  86.     Ext.tree.TreeNodeUI.prototype.updateFCUNCheckIcon = function(n){   
  87.         //如果有其它的兄弟接点未勾选掉。不更改父节�?   
  88.         var flag=true;   
  89.         if(n!=null)//如果是父节点,此处为空�?�?��要在这进行判�?   
  90.         {   
  91.             var nodes = n.childNodes;   
  92.             for(var i=0;i<nodes.length;i++)   
  93.             {   
  94.                 if(nodes[i].attributes.isCheck)   
  95.                 {   
  96.                     flag=false  
  97.                     break;   
  98.                 }   
  99.                    
  100.             }   
  101.             if(n!=null && flag)   
  102.             {   
  103.                 n.attributes.isCheck=false;   
  104.                 n.ui.ckNode.src="/images/tc/iconUnCheckAll.gif";   
  105.                 this.updateFCUNCheckIcon(n.parentNode);   
  106.             }   
  107.         }   
  108.     }   
  109.        
  110.     //更新子接点为不�?�?   
  111.     Ext.tree.TreeNodeUI.prototype.updateCCUNCheckIcon = function(cn){   
  112.         if(cn!=null)   
  113.         {   
  114.            for(var i=0;i<cn.length;i++)   
  115.             {   
  116.                 cn[i].attributes.isCheck=false;   
  117.                 cn[i].ui.ckNode.src="/images/tc/iconUnCheckAll.gif";   
  118.                 if(cn[i].hasChildNodes()){   
  119.                     cn[i].expand();   
  120.                     var temp=cn[i].childNodes;   
  121.                     this.updateCCUNCheckIcon(cn[i].childNodes);   
  122.                 }   
  123.             }    
  124.         }   
  125.     }   
  126.        
  127.        
  128. Ext.tree.TreeNodeUI.prototype.render=function(bulkRender){   
  129.         var n = this.node;   
  130.         var targetNode = n.parentNode ?    
  131.               n.parentNode.ui.getContainer() : n.ownerTree.container.dom;   
  132.         if(!this.rendered){   
  133.             this.rendered = true;   
  134.             var a = n.attributes;   
  135.            
  136.             // add some indent caching, this helps performance when rendering a large tree   
  137.             this.indentMarkup = "";   
  138.             if(n.parentNode){   
  139.                 this.indentMarkup = n.parentNode.ui.getChildIndent();   
  140.             }   
  141.                
  142.             var buf = ['<li class="x-tree-node"><div class="x-tree-node-el ', n.attributes.cls,'">',   
  143.                 '<span class="x-tree-node-indent">',this.indentMarkup,"</span>",   
  144.                 '<img src="'this.emptyIcon, '" class="x-tree-ec-icon">',   
  145.                 '<img src="', a.isCheck ? "/images/tc/iconCheckAll.gif" : "/images/tc/iconUnCheckAll.gif",'" class="x-tree-ec-icon">',   
  146.                 '<img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon',(a.icon ? " x-tree-node-inline-icon" : ""),'" unselectable="on">',   
  147.                 '<a hidefocus="on" href="',a.href ? a.href : "#",'" tabIndex="1" ',   
  148.                  a.hrefTarget ? ' target="'+a.hrefTarget+'"' : ""'><span unselectable="on">',n.text,"</span></a></div>",   
  149.                 '<ul class="x-tree-node-ct" style="display:none;"></ul>',   
  150.                 "</li>"];   
  151.                    
  152.             if(bulkRender !== true && n.nextSibling && n.nextSibling.ui.getEl()){   
  153.                 this.wrap = Ext.DomHelper.insertHtml("beforeBegin",   
  154.                                     n.nextSibling.ui.getEl(), buf.join(""));   
  155.             }else{   
  156.                 this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf.join(""));   
  157.             }   
  158.             this.elNode = this.wrap.childNodes[0];   
  159.             this.ctNode = this.wrap.childNodes[1];   
  160.             var cs = this.elNode.childNodes;   
  161.             this.indentNode = cs[0];   
  162.             this.ecNode = cs[1];   
  163.             this.ckNode = cs[2];   
  164.             this.iconNode = cs[3];   
  165.             this.anchor = cs[4];   
  166.             this.textNode = cs[4].firstChild;   
  167.             if(a.qtip){   
  168.                if(this.textNode.setAttributeNS){   
  169.                    this.textNode.setAttributeNS("ext""qtip", a.qtip);   
  170.                    if(a.qtipTitle){   
  171.                        this.textNode.setAttributeNS("ext""qtitle", a.qtipTitle);   
  172.                    }   
  173.                }else{   
  174.                    this.textNode.setAttribute("ext:qtip", a.qtip);   
  175.                    if(a.qtipTitle){   
  176.                        this.textNode.setAttribute("ext:qtitle", a.qtipTitle);   
  177.                    }   
  178.                }    
  179.             }   
  180.             this.initEvents();   
  181.             //this.renderIndent(); cached above now instead call updateExpandIcon   
  182.             this.updateExpandIcon();   
  183.         }else{   
  184.             if(bulkRender === true) {   
  185.                 targetNode.appendChild(this.wrap);   
  186.             }   
  187.         }   
  188.     };   
  189. //===============================================================================================================   
  190.   
  191. Ext.onReady(function(){   
  192.     // shorthand   
  193.     <!-- 删除等待进度条�?-->   
  194.     Ext.get("loading").remove();   
  195.     var Tree = Ext.tree;   
  196.     var dh = Ext.DomHelper;   
  197.        
  198.     var tree = new Tree.TreePanel('tree-div', {   
  199.         animate:true,    
  200.         loader: new Tree.TreeLoader({dataUrl:'/tree/getTreeJson'}),   
  201.         containerScroll: true  
  202.         //uiProvider: MyNodeUI   
  203.     });   
  204.     tree.on('contextmenu',contextmenu,tree);   
  205.     //tree.on('expand',insertCheckbox,tree);   
  206.   
  207.     // set the root node   
  208.     var root = new Tree.AsyncTreeNode({   
  209.         text: 'Topic',   
  210.         draggable:false,   
  211.         isCheck:true,   
  212.         id:'1'  
  213.     });   
  214.     tree.setRootNode(root);   
  215.     //render the tree   
  216.     tree.render();   
  217.     var editor = new Ext.tree.TreeEditor(tree, {allowBlank: false});   
  218.     editor.setSize(5,5);   
  219.     //root.expand(true,false);   
  220.     //容许树可以编�?   
  221.     //var ge = new Ext.tree.TreeEditor(tree, {allowBlank:false,blankText:'A name is required',selectOnFocus:true});   
  222.     //创建右键菜单   
  223.     function contextmenu(node,e){   
  224.             e.stopEvent();   
  225.             //var temp=ds.getAt(node.id);   
  226.            // alert(temp.data.email);   
  227.             var menu = new Ext.menu.Menu({   
  228.             id: 'mainMenu',   
  229.             items: [   
  230.                 new Ext.menu.Item({   
  231.                     text: '添加'  
  232.                 }),   
  233.                 new Ext.menu.Item({   
  234.                     text: '删除'  
  235.                 }),   
  236.                 new Ext.menu.Item({   
  237.                     text: '更新'  
  238.                 }),   
  239.                 new Ext.menu.Item({   
  240.                     text: '刷新'  
  241.                 })   
  242.             ]   
  243.         });   
  244.         var coords = e.getXY();   
  245.         menu.showAt([coords[0], coords[1]]);   
  246.     };   
  247. });   
  248.   
  249.   
  250. //treeLoader.on('beforeload', function(loader,node,callback){   
  251. //  if(node.attributes.tlevel != 3){   
  252. //      loader.dataUrl ='../getChildTreeNodeJsonObject';   
  253. //          }else{   
  254. //              return false;                      
  255. //          }   
  256. //      });  
分享到:
评论

相关推荐

    ext 包example\windows下的一个例子

    在IT行业中,"ext"通常指的是Ext JS,这是一个基于JavaScript的富客户端应用开发框架,用于构建功能丰富的Web应用程序。Ext JS提供了大量的UI组件和数据管理工具,使得开发者能够创建具有桌面应用般用户体验的Web...

    [pdf]Ext JS 6 By Example

    一本国外牛人写的关于 ExtJS 6 的电子书 [Ext JS 6 By Example]。这份资料在 PACKT上卖 35.99 刀的,讲的很详细,例子也比较简单,容易理解,现我准备利用工作之余翻译这份文档,为自己学习加深理解,也希望能帮助更...

    EXT2.0example

    EXT2.0example EXT2(Second Extended File System)是Linux操作系统中最早广泛使用的日志文件系统之一。EXT2.0作为EXT2的一个版本或扩展,它在原版EXT2的基础上可能进行了某些优化或功能增强,尽管具体EXT2.0的...

    Ext JS 6 By Example

    Ext JS 6 By Example英文版 属于自己找了半天,结果还是发现原版中没有记录,网页上图裂的那部分是大佬自己理解加上去的,尴尬,但是还是把原版的资源放在这里吧,如果是为了翻译版网页上图裂的那部分想看原图的,...

    Ext JS 6 by Example翻译

    **Ext JS 6 by Example 翻译** Ext JS 是一个功能强大的JavaScript框架,用于构建交互式的、数据驱动的Web应用程序。它提供了丰富的组件库,包括表格、图表、菜单、工具栏、窗体等,使得开发者可以快速创建复杂的...

    Extjs4.2_加强examples.js 自动隐藏消息框

    Ext.example.msg('Done', 'Your fake data was saved!'); //自动消失 3s 后 Ext.example.msg('Done', 'Your fake data was saved!',true,3000); //说明 Ext.example.msg(标题,内容,是否自动消失,时间);

    Ext JS6 by Example中文版(含源码).rar

    这个"Ext JS6 by Example中文版(含源码)"的资源,显然是一份关于如何使用Ext JS 6的中文教程,结合实例来帮助初学者快速上手。下面将详细探讨Ext JS 6的核心特性、重要组件以及开发实践。 1. **核心特性**: - **...

    Oryx&Ext example

    Oryx 加上 Ext 修改范例,实现在oryx上添加tab窗体

    EXT.NET Examples

    离线的EXT.NET Examples,目前EXT.NET的学习文档十分有限,本Examples能帮助你迅速上手EXT.NET,是学习EXT.NET的必备首选

    ext2.0的源码和一些example

    学习example中的实际应用案例,如grid的拖拽和树的拖拽,可以帮助我们更好地掌握EXT 2.0的使用技巧,同时提升项目开发能力。 总之,EXT 2.0的源码和示例为开发者提供了一条深入理解EXT工作机制的路径,通过学习和...

    ext 实例大全

    ext 在开发网页上功能强大。ext 实例大全包含网页设计中所需用到得常用组件,如Grid,Form,Tabs等等的开发应用实例。

    Ext.net 2.1.1 有dll源码和离线的官方实例

    Ext.net 2.1.1 有dll源码和离线的官方实例 开源代码

    Windows读取Ext4分区的工具 Ext2Read

    1. **支持多种EXT文件系统**: Ext2Read不仅支持EXT2,还支持更先进的EXT3和EXT4文件系统。EXT4是目前Linux发行版广泛采用的文件系统,其特点是速度快、支持大文件和大量文件。 2. **查看与复制**: 用户可以像在...

    Ext JS 6 By Example_code(书中示例源代码)

    Ext JS 6 By Example 的电子书中的 示例源代码

    在windows下使用Ext2Fsd访问EXT4分区

    在Windows操作系统中,由于默认不支持Linux文件系统如EXT4,因此无法直接读取或写入EXT4格式的分区。但有一些第三方工具可以帮助我们解决这个问题,其中之一就是Ext2Fsd。Ext2Fsd是一个免费的开源软件,专门设计用于...

    ext3.jar ext使用非常多

    EXT,全称EXT JS,是一种基于JavaScript的开源前端框架,主要应用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。EXT3.jar是EXT框架的一个版本,它包含EXT库的Java版本,通常用于Java Web应用程序...

    Windows 7下使用Ext2Fsd读取写入Linux Ext3&Ext4分区文件

    在Windows操作系统中,由于文件系统不兼容性,通常无法直接访问Linux系统中的Ext3或Ext4分区。然而,有了第三方工具如Ext2Fsd,Windows用户可以实现对这些Linux文件系统的读取和写入操作。本文将详细介绍如何在...

    Windows读写Ext2/Ext3/Ext4文件系统

    可以读写Ext2,以Ext2方式挂载Ext3文件系统(不支持Ext3日志),不支持中文! It provides Windows NT4.0/2000/XP/2003/Vista/2008 with full access to Linux Ext2 volumes (read access andwrite access). This ...

Global site tag (gtag.js) - Google Analytics