功能简介:(1)采用Ext2.2开发的;(2)支持数据三层操作;(3)支持右键菜单项;(4)节点增删改查操作;
数据库表的设计为表A(id,type,text),表B(id,fid,text),表A为根节点一级菜单与二级菜单数据项,其中type用于判别类型,fid为表B的外键,即A中的id,其实两张表也可以合为一张表,方法是利用type进行控制。
表A数据参考:
(1,0,'根节点');
(2,1,'二级菜单1');
(3,1,'二级菜单2');
... ...
表B数据参考:
(1,2,'三级菜单1');
(2,2,'三级菜单2');
(3,3,'三级菜单3');
... ...
以下是Javascript代码实现
/***Ext树相关控件定义开始***/
/***定义树的节点***/
var treeRoot = new Ext.tree.AsyncTreeNode({
id:'root',
treeid : '1',//根节点在数据库表中对应的ID
text : "根节点名称",
expanded : true,
expandable : true,
draggable : false
});
/***定义树的数据项加载器***/
var treeLoader = new Ext.tree.TreeLoader({
url : '',//获取一级菜单数据项URL,输出JSON格式数据
baseParams : {
parentId : '0'
},
listeners : {
beforeload : function(tree, node) {
var treeid = node.attributes.treeid;
//根据treeid获取第二层与第三层的数据项
if (treeid == '1') {
tree.url = '';//获取二级菜单数据项URL,输出JSON格式数据
tree.baseParams.parentId = treeid;
} else {
tree.url = '';//获取二级菜单下对应三级菜单数据项URL,输出JSON格式
tree.baseParams.parentId = treeid;
}
}
}
});
var treeMenu;//定义右键菜单
/***定义树的面板***/
var treePanel = tree = new Ext.tree.TreePanel({
root : treeRoot,
loader : treeLoader,
width : 220,
height : 340,
autoScroll :true,
contextMenu : treeMenu,
listeners : {
click : function(node, e) {
if (node.isLeaf()) {
//当前节点是叶子节点时触发
}
},
//定义右键菜单
contextmenu : function(node, e) {
//当节点为根节点时
if (node.parentNode == null) {
node.select();//当前节点被选中
treeMenu = new Ext.menu.Menu({
items : [{
text : "添加二级菜单项",
iconCls : 'leaf',
handler : function() {
Ext.MessageBox.prompt('请输入二级菜单名称', "", function(e,
text) {
if (e == "ok") {
Ext.Ajax.request({
//添加二级菜单的URL
url : '',
params : {
czdw : text,
dwlb : node.attributes.treeid,
gdjdm: wp.gdjdm
},
method : 'post',
sync : true,
success : function(res) {
//请求返回成功后在前天添加相应节点
var jsonObj = eval("(" + res.responseText + ")");
var tempNode = new Ext.tree.TreeNode({
treeid : jsonObj.treeid,
text :jsonObj.text,
expandable : true,
draggable : false,
dw:true//节点自定义属性,可根据需要添加,主要为判断加载菜单项
});
//注册右键菜单
tempNode.on('contextmenu',function(node,e){
node.select();
treeMenu.showAt(e.getPoint());
});
node.appendChild(tempNode);
try{
tempNode.select();//定位到新节点
}catch(e){}
},
failure : function() {
Ext.Msg.alert('提示消息','操作失败!');
}
});
}
})
}
}]
});
treeMenu.showAt(e.getPoint());//显示菜单位置
} else if (node.attributes.dw == true) {//当前为二级菜单节点时,即二层节点
node.select();
treeMenu = new Ext.menu.Menu({
items : [{
text : "添加三级菜单",
iconCls : 'leaf',
handler : function() {
Ext.MessageBox.prompt("请输入三级菜单名称", "", function(e,
text) {
if (e == "ok") {
Ext.Ajax.request({
//三级菜单添加URL
url : '',
params : {
mid : node.attributes.treeid,
ryxm : text,
gdjdm : wp.gdjdm
},
success : function(res) {
//前台添加相应节点
var jsonObj = eval("(" + res.responseText + ")");
var tempNode = new Ext.tree.TreeNode({
treeid : jsonObj.treeid,
text :jsonObj.text,
expanded : false,
expandable : false,
draggable : false,
ry:true//和dw属性类似,用于判断当前为第几级菜单
});
node.appendChild(tempNode);
tempNode.on('contextmenu',function(node,e){
node.select();
treeMenu.showAt(e.getPoint());
});
node.attributes.leaf=false;
node.attributes.leaf.iconCls='';
node.getUI().getIconEl().src='../../../ext/resources/images/default/tree/folder.gif';//修改父节点图标
node.expand();
//定位到新节点
try{
tempNode.select();
}catch(e){}
},
failure : function() {
Ext.Msg.alert('提示消息','操作失败!');
}
});
}
})
}
}, {
text : "编辑二级菜单",
iconCls : 'leaf',
handler : function() {
var nodeText = node.attributes.text;
Ext.MessageBox.prompt("请输入二级菜单新名称", nodeText, function(e,
text) {
if (e == "ok") {
Ext.Ajax.request({
url : '',//二级菜单更新URL
params : {
id : node.attributes.treeid,
czdw : text
},
success : function(request) {
node.setText(text);
Ext.Msg.alert('提示消息','编辑成功!');
},
failure : function() {
Ext.Msg.alert('提示消息','操作失败!');
}
});
}
})
}
}, {
text : '删除二级菜单项',
iconCls : 'leaf',
handler : function() {
Ext.Ajax.request({
url : '',
params : {
id : node.attributes.treeid
},
success : function(request) {
if(node.hasChildNodes()){
var nodes = node.childNodes;
for(var i=0;i<nodes.length;i++){
nodes[i].remove();
}
}
node.remove();
//Ext.Msg.alert('提示消息','删除成功!');
},
failure : function() {
Ext.Msg.alert('提示消息','操作失败!');
}
});
}
}]
});
treeMenu.showAt(e.getPoint());
} else if ( node.attributes.ry == true) {//当前节点为三级菜单项时,即三层节点
node.select();
treeMenu = new Ext.menu.Menu({
items : [{
text : "编辑三级菜单项",
iconCls : 'leaf',
handler : function() {
var nodeText = node.attributes.text;
Ext.MessageBox.prompt("请输入三级菜单新名称", nodeText, function(e,
text) {
if (e == "ok") {
Ext.Ajax.request({
url : '',//更新三级菜单数据项URL
params : {
id : node.attributes.treeid,
ryxm : text
},
success : function(request) {
node.setText(text);
},
failure : function() {
Ext.Msg.alert('提示消息','操作失败!');
}
});
}
})
}
}, {
text : '删除三级菜单项',
iconCls : 'leaf',
handler : function() {
Ext.Ajax.request({
url : '',//删除三级菜单的URL
params : {
id : node.attributes.treeid
},
success : function(request) {
node.remove();
//Ext.Msg.alert('提示消息','删除成功!');
},
failure : function() {
Ext.Msg.alert('提示消息','操作失败!');
}
});
}
}]
});
treeMenu.showAt(e.getPoint());
}
}
}
});
//var treeEditor = new Ext.tree.TreeEditor(treePanel);
var treeWin;
/***树相关控件定义结束***/
/***
* 获取树界面
*/
function getUnitsManageTreeWin() {
if (!treeWin) {
treeWin = new Ext.Window({
title : "Ext树",
width : 240,
height : 370,
items : [treePanel],
closeAction : 'hide'
});
}
treeWin.show();
}
分享到:
相关推荐
以上就是关于"ext2.0 树的增删改操作"及其相关知识的详细说明。掌握这些内容,将有助于你在构建Web应用时更熟练地使用树形控件,并且能够根据需求进行定制化开发。同时,了解下拉树的实现,可以使你的界面更加友好,...
总结来说,`Ext树例子`是关于如何使用ExtJS库中的`Ext.tree.Panel`组件来展示和操作层次化数据的一个主题。`tree1.txt`和`tree2.txt`文件提供了创建树的数据源,通过解析这些文件,我们可以构建出具有实际数据的交互...
其中,“Ext树”(Ext Tree)是ExtJS中的一个重要组件,用于展示层级结构的数据,如文件系统、组织架构等。本文将深入探讨如何在ExtJS中创建一个树形视图。 首先,理解Ext树的基本结构至关重要。一个Ext树由节点...
在IT领域,EXT是一个流行的JavaScript库,用于构建富客户端应用程序,尤其在Web应用开发中广泛应用。...通过这种方式,你可以构建一个动态、交互性强的EXT树控件,有效地展示和操作数据库中的层次结构数据。
2. **选择事件**:EXT树提供了一些与选择相关的事件,如`select`、`deselect`和`beforeselect`。开发者可以监听这些事件并添加自定义逻辑,比如在选择节点时触发某些动作。 3. **撤销操作**:EXT本身并不直接提供...
1. `tree.htm`:这可能是一个包含下拉树示例的HTML文件,用于展示如何使用Ext JS创建和操作下拉树。 2. `dropTree.htm`:同样,这可能是一个与下拉树相关的HTML页面,可能包含了不同的实现或示例。 3. `MzTreeView...
下拉树(Dropdown Tree)是Ext JS中的一种特殊控件,它结合了下拉列表和树结构的功能,通常用于展示层次化的数据,并让用户从中选择一个或多个项。 下拉树的基本结构由两部分组成:一个文本框和一个关联的下拉面板...
这个类扩展自`Ext.form.field.Select`,因此它具备常规下拉列表的所有特性,同时增加了树形结构的展示和操作。以下是一些关于如何使用Ext下拉列表树的关键知识点: 1. **配置项**:创建下拉列表树时,需要定义一些...
【Ext树】是一种基于Ext JS库的图形用户界面组件,用于呈现层次结构的数据。Ext JS是一个强大的JavaScript框架,主要用于构建富客户端应用。在本案例中,“简单的ext树”是一个为初学者设计的基础教程,旨在帮助那些...
在描述中提到的"Ext TreePanel Checked Ext复选框树"是指`TreePanel`的一种特殊形式,它扩展了基本的树视图,加入了复选框功能。 复选框树(Checked Tree)允许用户通过复选框来选择或取消选择树结构中的节点。这种...
"EXT级联选择的树形控件"是一个实现树形结构并支持级联选择的EXT组件。在实际应用中,它可以帮助用户通过树节点的选择来联动控制其他相关选项的状态。这个控件可能包含以下关键特性: 1. **树形结构**:每个节点...
首先,让我们了解EXT树形菜单的基本概念。EXT的TreePanel组件是实现树形结构的主要工具,它能够展示层次化的数据,通常用于导航或展现层级关系。树形菜单支持节点的展开、折叠、添加和删除,以及各种交互操作。 要...
Ext2.0不仅仅实现了复选框的树形菜单,而且使得在选中某个节点时,如果有子节点,那么就能够将所有的字节点全部选中,当然你也可以直接选择你希望的节点。但是,当你第一次选中某个有子节点但是子节点并没有展开的...
在描述中提到的“ext 2.1相关的文件和例子”,意味着我们将探讨的是Ext JS 2.1版本的相关知识,这是一个较早的版本,但仍然广泛用于教学和理解基础概念。 1. **Ext JS简介**:Ext JS的核心特性包括组件化开发、强大...
从给定的文件信息中,我们可以深入探讨“ext树实例代码”这一主题,了解如何在Ext JS中详细应用tree控件。 ### 标题:ext树实例代码 #### 描述:ext中,tree控件的详细应用,实例。 ### 知识点解析: **1. Ext ...
在提供的`动态树例子json`文件中,可能包含了上述提到的JSON数据结构,用于演示EXT如何处理动态树及各种操作。通过实际代码示例,我们可以更深入地理解EXT动态树的操作方式。在实践中,结合EXT的API文档和示例代码,...
在给定的标题“Ext树形菜单(我自己做的)”中,我们可以推断出这个压缩包包含了一个由开发者自定义的ExtJS树形菜单组件。树形菜单是用户界面中常用的一种元素,它用于展示层次结构的数据,比如文件系统、组织结构或...
总的来说,EXT实现动态树功能涉及到EXT TreePanel的使用、数据存储的配置、节点操作的实现以及用户交互的处理。通过深入理解和实践这些知识点,你可以创建出功能强大的动态树形视图,满足复杂的数据管理和展示需求。
本文将深入探讨如何处理无限级JSON数据格式并实现动态加载,以优化EXT树的性能。 首先,我们要理解EXT树的基本结构。EXT树的每个节点都是一个`Ext.tree.Node`对象,包含ID、文本、子节点等属性。无限级树意味着树的...
创建一个基本的EXT树形菜单,首先需要定义一个配置对象,包含`title`(菜单标题)、`store`(存储树形数据的Store)和`rootVisible`(是否显示根节点)等属性。例如: ```javascript var treePanel = Ext.create...