论坛首页 Web前端技术论坛

EXT2.0 checkbox树的扩展(支持单选,级联多选,只选叶子等)

浏览 82939 次
精华帖 (6) :: 良好帖 (18) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-01  
aiwobucuo 写道
我要用它来做菜单权限。发现这个要生成符合这个树的JSON数据好难生成。你们做的是固定写死了吗? 还是有什么好方法生成。指教一下。谢谢 了。

如果用异步的,那一次只生成一组JSON数据,是很方便的,如:
[{id:1,text:'a1',leaf:true},{id:2,text:'a2',leaf:true},...]
0 请登录后投票
   发表时间:2008-07-01  
jerrygyp 写道
怎么取树中所有值,包括没有展开的值

那只能去后台取了,因为没有展开,前台就没有结点
0 请登录后投票
   发表时间:2008-07-01  
Victorn 写道
1、可否动态更改TreePanel中的属性呢?例如我想在HTML页面有一个input,当想更改树的高度时就输入一个值,然后Tree的高度效果是随之改变。请问该如何做?
2、请教,如果我使用 checkModel:'multiple',这时想添加一个function,功能是实现选择该节点的所有父节点或者所有孩子节点,该如何写呢?


1.你试下EXT提供的几个API,如 setHeight( Number height )/setSize( Number/Object width, Number height )

2.其实级联分三种情况:
  情况一:所有父节点和子节点都选上(如本程序)
  情况二:所有父节点选上,子节点不选
  情况三:所有父节点不选,子节点选上
要实现情况二和情况三,可以相应改下程序,增加checkModel的种类,
如 checkModel:'parentCascade'和checkModel:'childCascade',然后在程序里增加IF判断就行了:
if(!this.onlyLeafCheckable){
	if(this.checkModel == 'cascade' || this.checkModel == 'parentCascade'){
		var parentNode = n.parentNode;
		if(parentNode !== null) {
			this.parentCheck(parentNode,checked);
		}
	}
	if(this.checkModel == 'cascade' || this.checkModel == 'childCascade'){
		if( !n.expanded && !n.childrenRendered ) {
			n.expand(false,false,this.childCheck);
		}else {
			this.childCheck(n);
		}
	}

} else if(this.checkModel == 'single'){
	var checkedNodes = tree.getChecked();
	for(var i=0;i<checkedNodes.length;i++){
		var node = checkedNodes[i];
		if(node.id != n.id){
			node.getUI().checkbox.checked = false;
			node.attributes.checked = false;
			tree.fireEvent('check', node, false);
		}
	}
}

0 请登录后投票
   发表时间:2008-07-01  
c_mingze@163.com 写道
在特定的情况 我的树 只允许浏览 而不能操作 也就是希望吧选框去掉,
那么能不能加个属性当是1的时候可带选框 是0的时候不带选框。



ext本身自带checked属性来实现结点是否有checkbox,如果后台返回JSON数据中结点含有checked属性,就有checkbox,否则无。
但这个对于级联多选来说增加额外的判断,所以就把这一特性去掉了,如果有必要,可以加上,但在CHECK操作时,要增加判断,还是挺麻烦的。
0 请登录后投票
   发表时间:2008-07-03  
很有意义,提个建议,能不能在主贴把代码打包放上来,用颜色表示更新日期就行了,这样大家下载资料方便点,可以一起研究讨论。
0 请登录后投票
   发表时间:2008-07-03  
刚做了点修改,双击的时候不会 收起子节点了 感觉舒服点
数据采用本地js的,方便大家看效果。


ps:ext-2.0是空的 自己放进去 (要不文件太大了)
0 请登录后投票
   发表时间:2008-07-08  
我的还是加载不上去,这个控件整个都加不上去,不显示:(
返回数据:{"id":1,"text":"用户1","children":[{"id":2,"text":"角色1","leaf":true},{"id":3,"text":"角色2","leaf":true}

]}

js代码:var treeTest = new Ext.tree.TreePanel({  
               // applyTo:'tree-ct',  
                width:638, 
                onlyLeafCheckable: true,  
                animate: false,  
                rootVisible: false,  
                autoScroll:true,  
                loader: new Ext.tree.TreeLoader({  
                    dataUrl:'../getUsers.do',  
                    baseAttrs: { uiProvider: Ext.tree.TreeCheckNodeUI }  
                }),  
                root: new Ext.tree.AsyncTreeNode({  
                    id:'0',text:'根结点'  
                })  
            });  
            //tree.getEl().center();  
            treeTest.getRootNode().expand();  

是怎么回事呢?是哪里设置不正确吗?
0 请登录后投票
   发表时间:2008-07-08  
buaabyy 写道
我的还是加载不上去,这个控件整个都加不上去,不显示:(
返回数据:{"id":1,"text":"用户1","children":[{"id":2,"text":"角色1","leaf":true},{"id":3,"text":"角色2","leaf":true}

]}
....

你返回的JSON数据不对,应该是:
[{"id":1,"text":"用户1","children":[{"id":2,"text":"角色1","leaf":true},{"id":3,"text":"角色2","leaf":true}]}]
整体加上[]
0 请登录后投票
   发表时间:2008-07-15  
请问各位,我的代码如下,树能从数据库里读出并显示
但是为什么还是看不到checkbox选择框?


<%@ page language="java" contentType="text/html; charset=GB2312" %> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Customizing TreePanel</title> 
 
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">   
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="./scripts/ext/resources/css/ext-all.css">
    <script type="text/javascript" src="./scripts/ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="./scripts/ext/ext-all.js"></script>
   
    <script type="text/javascript" src="./scripts/demo/TreeCheckNodeUI.js"></script> 
 
    <script> 
       var imagePath = './scripts/image';  
        //Ext.BLANK_IMAGE_URL = imagePath+'/menu-show.gif';  
        Ext.onReady(function(){  
            var tree = new Ext.tree.TreePanel({  
                applyTo:'tree-ct',  
                width:568,  
                height:300,  
                checkModel: 'cascade',  
                onlyLeafCheckable: false,  
                animate: false,  
                rootVisible: true,  
                autoScroll:true,  
                loader: new Ext.tree.TreeLoader({  
                    dataUrl:'yonghuzuquanxiandata.jsp',  
                    baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI }  
                }),  
                root: new Ext.tree.AsyncTreeNode({  
                    id:'0',text:'根结点'  
                })  
            });  
            tree.getEl().center();  
            tree.getRootNode().expand();  
        });  
    </script> 
</head> 
<body> 
 
<div id="tree-ct"> 
 
</body> 
</html> 
0 请登录后投票
   发表时间:2008-07-17  
你看下./scripts/demo/TreeCheckNodeUI.js 文件里,是Ext.ux.TreeCheckNodeUI,还是Ext.tree.TreeCheckNodeUI
以前使用的是Ext.tree.TreeCheckNodeUI,最近更新了一下,统一换为Ext.ux.TreeCheckNodeUI
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics