转自:https://blog.csdn.net/iteye_7988/article/details/81886654

在ext1.x里,树是没有checkbox的, 幸好在2.X版本里提供了这个功能, 在许多应用里, 带有checkbox的树使用还是很常见的

Ext2.X提供了简单的checkbox实现,但对于一些复杂的需求,如: 级联多选(选中父结点,自选中其所有子结点和所有父结点) ,
单选等等, Ext2.X并没有帮我们实

还有最难解决的情况, 当树是异步的时候, 要想级联多选, 实现起来有些难度

在此, 通过对Ext.tree.TreeNodeUI进行扩展,这些问题都得到很好的解决

对 Ext.tree.TreeNodeUI
进行checkbox功能的扩展,后台返回的结点信息不用非要包含checked属性

扩展的功能点有:
一、支持只对树的叶子进行选择

  
只有当返回的树结点属性leaf = true 时,结点才有checkbox可选
   
使用时,只需在声明树时,加上属性 onlyLeafCheckable: true 既可,默认是false

二、支持对树的单选
   
只允许选择一个结点
   
使用时,只需在声明树时,加上属性 checkModel: "single" 既可

三、支持对树的级联多选
   
当选择结点时,自动选择该结点下的所有子结点,或该结点的所有父结点(根结点除外),特别是支持异步,当子结点还没显示时,会从后台取得子结点,然后将其选中/取消选中

使用时,只需在声明树时,加上属性 checkModel: "cascade"
或"parentCascade"或"childCascade"既可
    cascade
:级联选中所有父结点和子结点
   
parentCascade :级联选中所有父结点
   
childCascade  :级联选中所有子结点

四、添加"check"事件
   
该事件会在树结点的checkbox发生改变时触发
   
使用时,只需给树注册事件,如:
   
tree.on("check",function(node,checked){...});

默认情况下,checkModel为
'multiple',也就是多选;onlyLeafCheckable为false,所有结点都可选

使用方法:在loader里加上 baseAttrs:{uiProvider:Ext.ux.TreeCheckNodeUI}
既可.

例如:
Js代码

Java代码  
  1. var tree = new Ext.tree.TreePanel({
  2. el:'tree-ct',
  3. width:,
  4. height:,
  5. checkModel: 'cascade',   // 对树的级联多选
  6. onlyLeafCheckable: false,//对树所有结点都可选
  7. animate: false,
  8. rootVisible: false,
  9. autoScroll:true,
  10. dwrCall:Tmplt.getTmpltTree,
  11. baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI } //添加uiProvider属性
  12. }),
  13. root: new Ext.tree.AsyncTreeNode({ id:'0' })
  14. });
  15. tree.on("check",function(node,checked){alert(node.text+" = "+checked)}); //注册"check"事件
  16. tree.render();
  17. var tree = new Ext.tree.TreePanel({
  18. el:'tree-ct',
  19. width:,
  20. height:,
  21. checkModel: 'cascade',   //对树的级联多选
  22. onlyLeafCheckable: false,//对树所有结点都可选
  23. animate: false,
  24. rootVisible: false,
  25. autoScroll:true,
  26. loader: new Ext.tree.DWRTreeLoader({
  27. dwrCall:Tmplt.getTmpltTree,
  28. baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI }//添加uiProvider属性
  29. }),
  30. root: new Ext.tree.AsyncTreeNode({ id:'0' })
  31. });
  32. tree.on("check",function(node,checked){alert(node.text+" = "+checked)}); //注册"check"事件
  33. tree.render();

需要注意的是, 使用例子里的Tree
使用了Ext.tree.DWRTreeLoader这个扩展类,用来加载后台树结点,这和使用其它的loader没有区别的,

如果您使用其它的loader, 同样加上 baseAttrs: { uiProvider:
Ext.ux.TreeCheckNodeUI } 就行了

Java代码  
  1. 实现单选功能:
  2. this.on('checkchange',this.check,this);
  3. getNodes:function(treePanel){
  4. var startNode = treePanel.getRootNode();
  5. var r = [];
  6. var f = function(){
  7. r.push(this);
  8. };
  9. startNode.cascade(f);
  10. return r;
  11. },
  12. check : function(node,bool) {
  13. if(!bool){
  14. return;
  15. }
  16. if(this.checkModel=='single'){
  17. var nodes =this.getNodes(this);
  18. ){
  19. ,len=nodes.length;i
  20. if(nodes[i].id!=node.id){
  21. if(nodes[i].getUI().checkbox){
  22. nodes[i].getUI().checkbox.checked = false;
  23. nodes[i].attributes.checked=false;
  24. }
  25. }
  26. }
  27. }
  28. }
  29. }

81.Ext TreePanel实现单选等功能的更多相关文章

  1. ExtJs2.0学习系列(12)--Ext.TreePanel之第一式

    今天开始,我们就开始一起学习TreePanel了,道个歉,上篇的代码很乱阿. 我总是喜欢用最简单的例子开始,去理解最基本的使用方法,减少对i后面高级使用的干扰! TreePanel是继承自Panel, ...

  2. Extjs Ext.TreePanel

    TreePanel 简单实例. <link rel="stylesheet" href="Js/ext-4.2/resources/css/ext-all-nept ...

  3. ext TreePanel树节点操作

    1.全部展开 tree.expandAll();2.全部收缩 tree.collapseAll();3.得到父节点 node.parentNode4.判断是否有父节点 node.parentNode= ...

  4. [Ext.Net]TreePanel 异步加载数据

    异步加载数据指的是页面加载的时候只显示根目录,点击根目录再去加载其子目录. 下面就来介绍下这种异步加载的树结构要怎么实现 现将例子的图 QQ图片20131225134353.jpg (12.1 KB, ...

  5. Extjs treePanel过滤查询功能【转】

    Extjs4.2中,对于treeStore中未实现filterBy函数进行实现,treestore并未继承与Ext.data.Store,对于treePanel的过滤查询功能,可有以下两种实现思路: ...

  6. EXT.NET 使用总结(2) ---TreePanel(带右键菜单,节点自定义属性)

    TreePanel(带右键菜单,节点自定义属性) 其实这个树控件也挺好用的.http://www.ztree.me/v3/main.php#_zTreeInfo html <ext:Panel ...

  7. Ext.Net TreePanel 修改Icon图标

    分类: Ext.Net2012-09-24 13:44 1779人阅读 评论(0) 收藏 举报 webformserverextassemblyxhtmlobject 1.默认icon 2.自定义ic ...

  8. [Ext JS 4] Grid 实战之分页功能

    前言 分页功能的实现有两种途径: 一种是服务端分页方式, 也就是web客户端传递页码参数给服务端,服务端根据页面参数返回指定条数的数据.也就是要多少取多少.这种方式比较适合Grid  的数据量很大,需 ...

  9. [Ext.Net]TreePanel+gridPanel实例

     @小花要完整例子,尝试一下图文并茂,力求完整. gridPanel TreePanel.JPG (27.49 KB, 下载次数: 16) 下载附件  保存到相册 2013-1-6 11:24 上 ...

随机推荐

  1. Tcl之Lab1

    Task 1. Use help 1) What is the default switch for the redirect command? -file help -v redirect # or ...

  2. 清除Linux系统多余引导选项

    由于我把系统给升级(update)了,在grub引导模式出现新旧版本(Grub与Grub2)的引导系统分别为正常启动和进入恢复模式各2个引导项,如下图显示:百度找不到相关或类似的教程,只好半夜起来研究 ...

  3. Spring学习_day02_AOP,AspectJ,JdbcTemplate

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! Spring_day02 一.AOP面向切面编程 1. ...

  4. HDU_1113_字符串处理

    Word Amalgamation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. 零基础学习Python培训,应该选择哪个培训班?

    近几年中,Python一直是市场上最受欢迎的编程语言之一.它语法自然,入门简单,同时应用范围又极广,无论是大火的人工智能.大数据还是传统的web开发.自动化运维,Python都能够大展拳脚.根据职友集 ...

  6. Django工程

    一.Django工程创建 1.Django安装: pip3 install django 安装成功后,会在python的安装目录下“Scripts"中生成”django-admin.exe& ...

  7. kernel中的函数指针

    经常会看到这类的结构体: 这个结构体中 有几个函数指针, 这种方式的好处,可以有多种具体的函数实现,但是,这样就统一了接口 struct address_space_operations { int ...

  8. [Luogu] P1233 木棍加工

    题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理 ...

  9. Django View(视图系统)

    Django View 官方文档 一个视图函数(类),简称视图,是一个简单的 Python 函数(类),它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误 ...

  10. 为什么有些图像在显示前要除以255?(zhuan)

    imshow是用来显示图片的,如 >> I = imread('moon.tif'); >> figure,imshow(I); 而有时为了数据处理,要把读取的图片信息转化为更 ...