ext3.0 树控件处理
来源:互联网 发布:淘宝店怎么看订单 编辑:程序博客网 时间:2024/06/05 01:16
前几个月,一直在学习ext,并用它做了个项目,其中涉及到大量的树列表的创建,动态修改。现在不忙了,总结出来:
//创建节点
root为树的根节点,node当前要加入的节点,nodeArray所有的树节点(可以不包括根节点) checked表示树节点是否加入check框,带check框的节点都加入了选中子节点,父节点连同当前节点的子节点一起选中的事件。
function addNode(root,node,nodeArray,checked){
//alert(node.ID);
if(findNode(root,node.ID)!=null){
return;
}
var parent = findNode(root,node.PARENT);
if(parent==null){
for(var j=0;j<nodeArray.length;j++){
if(nodeArray[j].ID==node.PARENT){
addNode(root,nodeArray[j],nodeArray,checked);
}
}
}
parent = findNode(root,node.PARENT);
if(checked){
if(node.CHECKED=='true'){
node.CHECKED=true;
}
if(node.CHECKED=='false'){
node.CHECKED=false;
}
var newNode=createCheckedNode(node);
}else{
var newNode=new Ext.tree.TreeNode({
text : node.TEXT,
id : node.ID ,
leaf:false,
draggable: false,
expanded : true//默认展开根节点
});
}
parent.appendChild(newNode);
}
//创建带checked属性的节点
function createCheckedNode(node){
var newNode=new Ext.tree.TreeNode({
text : node.TEXT,
id : node.ID ,
leaf:false,
draggable: false,
checked:node.CHECKED,
expanded : true,//默认展开根节点
listeners:{
'checkchange': function(){
checkChange(newNode);
}
}
});
return newNode;
}
//节点改变触发的状态
function checkChange(newNode){
var checked=newNode.attributes.checked;
//alert("ssssss");
changeParentNode(newNode);
var childs = newNode.childNodes;
//alert(childs.length);
for(var i=0;i<childs.length;i++){
//alert(childs[i].attributes.checked);
if(childs[i].attributes.checked!=checked){
childs[i].ui.toggleCheck();
}
}
}
//同步父节点
function changeParentNode(newNode){
var parent=newNode.parentNode;
if(parent==null){
return;
}
var allChilds=parent.childNodes;
//alert(allChilds.length);
var checked=parent.attributes.checked;
var childChecked=false;
for(var i=0;i<allChilds.length;i++){
if(allChilds[i].attributes.checked){
childChecked=true;
if(!checked){
changeChecked(parent);
changeParentNode(parent);
}
return;
}
}
if(checked){
changeChecked(parent);
changeParentNode(parent);
return;
}
}
//改变父节点的选中状态
function changeChecked(node){
node.suspendEvents();
node.ui.toggleCheck();
node.resumeEvents();
}
查找任意层次的节点,只要你的nodeId足够深。
//查找节点
function findNode(parent,nodeId){
if(parent.id==nodeId){
return parent;
}
var node=parent.findChild('id',nodeId);
if(node!=null){
return node;
}else{
var childs=parent.childNodes;
for(var i=0;i<childs.length;i++){
if(childs[i].hasChildNodes()){
node = findNode(childs[i],nodeId);
if(node!=null){
return node;
}
}
}
return null;
}
}
查找当前根节点的所有节点。
//查找所有的节点,有子节点则不加人返回数组,没有则加入返回数组
var array=[];
function findAllNode(root,arr){
if(arr==null){
array=[];
}
array.push(root);
if(!root.hasChildNodes()){
return array;
}
var childs=root.childNodes;
for(var i=0;i<childs.length;i++){
findAllNode(childs[i],array);
}
return array;
}
- ext3.0 树控件处理
- EXT3.0的EditorGrid ComboBox控件显示数字的问题
- ext3.0学习 renderer
- EXT3.0 参数传递
- ext3
- 初识 EXT3.0 中的 chart
- ext3.0框架简要介绍
- EXT3.0中的同步请求
- EXT3.0各种布局说明
- ext3.0 treegrid 部门管理
- Ext3.0学习笔记grid
- Ext3 动态树 右键菜单
- Ext3 动态加载树菜单
- EXT3.0实现的同步请求
- EXt3.0 PagingToolbar中refresh未定义?
- 自定义报表之动态列(Ext3.0)
- 09-11月学习Ext3.0
- Ext3.0 final full realse下载地址
- 日志级别的选择:Debug、Info、Warn、Error还是Fatal
- 作业
- c#实现的一些几何算法(三)
- CSS 中 Display 的一些特殊属性
- 使用memcached缓存 替代solr中的LRUCache缓存
- ext3.0 树控件处理
- SQL SERVER 2008 压缩备份
- 解决简化版本xp|Ghost xp 没有iis的问题
- Qt数据库(一)简介
- 用2进制和10进制实现checkBox
- JS常用
- bootm引导内核过程详解之一-cmd_bootm
- How to get battery info
- 回顾时光 HTML的发展史