树形tree组件详解
2012-01-27 00:00
429 查看
1.树形的拖拽
Ext.tree.viewDDDPlugin
alias:"plugin.treeviewdragdrop",
需要配置:
viewConfig:{
plugins:{
ptype:"treeviewdragdrop"
}
},
事件
listeners:{
drop:function(node,data,dropRec,dropPosition){
//放下之后触发
},
beforedrop:function(node,data,overModel,dropPostion,dropFunction,options){
//放下之前
}
}
代码配置:
viewConfig:{
plugins:{
ptype:"treeviewdragdrop",
appendOnly:true
},
listeners:{
beforedrop:function(node,data,overModel,dropPostion,dropFunction,options){
// if(overModel.get("leaf")){
// overModel.set("leaf",false);
// }
},
drop:function(node,data,overModel,dropPostion,options){
//ajax的操作把数据同步到后台数据库
alert("把"+data.records[0].get("text")+"移动到"+overModel.get("text"));
}
}
}
2.模拟拷贝和粘贴
(1)声明属性
config:{
copyNodes:""//声明一个属性,并且有对应的setget方法, 它充当的剪切板的作用
},
(2)事件实现:
"deptTreebutton[id=copy]":{
//复制功能
click:function(b,e){
vartree=b.ownerCt.ownerCt;
//得到数据集合
varnodes=tree.getChecked();
if(nodes.length>0){
//把数据放到剪切版中
tree.setCopyNodes(Ext.clone(nodes));
alert("你已经拷贝了"+nodes.length+"个节点");
//去掉选中状态
for(vari=0;i<nodes.length;i++){
nodes[i].data.checked=false;
//更新一下信息
nodes[i].updateInfo();
}
}else{
alert("请选择数据");
}
}
},
"deptTreebutton[id=paste]":{
click:function(b,e){
vartree=b.ownerCt.ownerCt;
varcheckednodes=tree.getChecked();
if(checkednodes.length==1){
//被追加孩子的节点
varnode=checkednodes[0];
//去前切版中取数据
varnodes=tree.getCopyNodes();
//需要做一下后台同步,伴随这id的改变等操作
//最好在剪切板中的数据呈现在页面中,把东西遍历显示出来
if(nodes.length>0){
for(vari=0;i<nodes.length;i++){
varn=nodes[i].data;
n["id"]=n["id"]+"1";
node.appendChild(n);
}
}
}else{
alert("剪切板中无数据或者没有选择要追加孩子的节点");
}
}
},
3.删除操作
在事件中实现
"deptTreebutton[id=delete]":{
click:function(b,e){
vartree=b.ownerCt.ownerCt;
varnodes=tree.getChecked();
if(nodes.length>0){
for(vari=0;i<nodes.length;i++){
nodes[i].remove();
}
}else{
alert("你没有选择要删除的数据");
}
}
}
4.多列数
声明一个model 在controller层中指定,并在stroe层中配置model,然后配置view层中的tree
//配置多列树
columns:[
//树形的模式,xtype指定
{
xtype:"treecolumn",
text:"text",
width:150,
dataIndex:"text"
},
//普通的模式
{
text:"info",
width:150,
dataIndex:"id"
}
],
5.单机树形根节点,子节点也被选中
"deptTree":{
checkchange:function(node,checked,options){
if(node.data.leaf==false){
if(checked){
//首先打开节点
node.expand();
//遍历孩子 如果孩子不是叶子,可以用findChild 和isLeaf两个方法来配合使用递归
node.eachChild(function(n){
n.data.checked=true;
n.updateInfo({checked:true});
});
}else{
node.expand();
//遍历孩子 如果孩子不是叶子,可以用findChild 和isLeaf两个方法来配合使用递归
node.eachChild(function(n){
n.data.checked=false;
n.updateInfo({checked:false});
});
}
}else{//单击叶子
if(!checked){
node.parentNode.data.checked=false;
node.parentNode.updateInfo({checked:false});
}
}
},
}
Ext.tree.viewDDDPlugin
alias:"plugin.treeviewdragdrop",
需要配置:
viewConfig:{
plugins:{
ptype:"treeviewdragdrop"
}
},
事件
listeners:{
drop:function(node,data,dropRec,dropPosition){
//放下之后触发
},
beforedrop:function(node,data,overModel,dropPostion,dropFunction,options){
//放下之前
}
}
代码配置:
viewConfig:{
plugins:{
ptype:"treeviewdragdrop",
appendOnly:true
},
listeners:{
beforedrop:function(node,data,overModel,dropPostion,dropFunction,options){
// if(overModel.get("leaf")){
// overModel.set("leaf",false);
// }
},
drop:function(node,data,overModel,dropPostion,options){
//ajax的操作把数据同步到后台数据库
alert("把"+data.records[0].get("text")+"移动到"+overModel.get("text"));
}
}
}
2.模拟拷贝和粘贴
(1)声明属性
config:{
copyNodes:""//声明一个属性,并且有对应的setget方法, 它充当的剪切板的作用
},
(2)事件实现:
"deptTreebutton[id=copy]":{
//复制功能
click:function(b,e){
vartree=b.ownerCt.ownerCt;
//得到数据集合
varnodes=tree.getChecked();
if(nodes.length>0){
//把数据放到剪切版中
tree.setCopyNodes(Ext.clone(nodes));
alert("你已经拷贝了"+nodes.length+"个节点");
//去掉选中状态
for(vari=0;i<nodes.length;i++){
nodes[i].data.checked=false;
//更新一下信息
nodes[i].updateInfo();
}
}else{
alert("请选择数据");
}
}
},
"deptTreebutton[id=paste]":{
click:function(b,e){
vartree=b.ownerCt.ownerCt;
varcheckednodes=tree.getChecked();
if(checkednodes.length==1){
//被追加孩子的节点
varnode=checkednodes[0];
//去前切版中取数据
varnodes=tree.getCopyNodes();
//需要做一下后台同步,伴随这id的改变等操作
//最好在剪切板中的数据呈现在页面中,把东西遍历显示出来
if(nodes.length>0){
for(vari=0;i<nodes.length;i++){
varn=nodes[i].data;
n["id"]=n["id"]+"1";
node.appendChild(n);
}
}
}else{
alert("剪切板中无数据或者没有选择要追加孩子的节点");
}
}
},
3.删除操作
在事件中实现
"deptTreebutton[id=delete]":{
click:function(b,e){
vartree=b.ownerCt.ownerCt;
varnodes=tree.getChecked();
if(nodes.length>0){
for(vari=0;i<nodes.length;i++){
nodes[i].remove();
}
}else{
alert("你没有选择要删除的数据");
}
}
}
4.多列数
声明一个model 在controller层中指定,并在stroe层中配置model,然后配置view层中的tree
//配置多列树
columns:[
//树形的模式,xtype指定
{
xtype:"treecolumn",
text:"text",
width:150,
dataIndex:"text"
},
//普通的模式
{
text:"info",
width:150,
dataIndex:"id"
}
],
5.单机树形根节点,子节点也被选中
"deptTree":{
checkchange:function(node,checked,options){
if(node.data.leaf==false){
if(checked){
//首先打开节点
node.expand();
//遍历孩子 如果孩子不是叶子,可以用findChild 和isLeaf两个方法来配合使用递归
node.eachChild(function(n){
n.data.checked=true;
n.updateInfo({checked:true});
});
}else{
node.expand();
//遍历孩子 如果孩子不是叶子,可以用findChild 和isLeaf两个方法来配合使用递归
node.eachChild(function(n){
n.data.checked=false;
n.updateInfo({checked:false});
});
}
}else{//单击叶子
if(!checked){
node.parentNode.data.checked=false;
node.parentNode.updateInfo({checked:false});
}
}
},
}
相关文章推荐
- jQuery EasyUI详解-EasyUI树形控件tree
- JS树形菜单组件Bootstrap TreeView使用方法详解
- Vue组件tree实现树形菜单
- Vue2组件tree实现无限级树形菜单
- Vue.js组件tree实现无限级树形菜单
- BootStrap实现树形目录组件代码详解
- Bootstrap树形组件jqTree的简单封装
- vue.js树形组件详解,删除双击增加分支
- vue.js树形组件详解,删除双击增加分支
- JQuery TreeGrid 组件详解
- Ajax式的树形目录组件tree,支持无限层级+在线直观编辑功能——QFaces1.3(JSF)
- treeTable jquery的树表组件 java实现 Java实现树形菜单
- ExpandableListView组件详解
- ExtJS 4 组件详解
- [Android四大组件] Activity 详解
- vc中调用Com组件的所有方法详解
- HDU 6161 Big binary tree(树形DP)
- Hibernate组件映射代码详解
- Flex4_Tree组件1(添加、删除、展开、关闭、右键菜单)