Ext树结构通过右键菜单进行操作的一个事例,供以后应用参考。
/**
* @description 组织架构主页面
* @date 2010-6-10
* @version 1.0
*
*/
//定义命名空间
Ext.ns("Rosy.department");
/**
* 组织架构树状面板
* @class Rosy.department.DepartmentTreePanel
* @extends Ext.tree.TreePanel
*/
Rosy.department.DepartmentTreePanel = Ext.extend(Ext.tree.TreePanel,{
// 构造方法
constructor:function(){
// 构造组件
Rosy.department.DepartmentTreePanel.superclass.constructor.apply(this,[{
//renderTo: Ext.getBody(),
useArrows: true,
autoScroll: true,
animate: true,
enableDD: true,
containerScroll: true,
border: false,
id:'departmentTreePanel',
region: 'center',
margins: '2 2 0 2',
width: 300,
loader: new Ext.tree.TreeLoader({
dataUrl : '/mrp/treeDept.action',
listeners:{
"beforeload":function(treeLoader,node) {
treeLoader.baseParams.departmentId=
(node.id!="01"?node.id:"01");
}
}
}),
root: new Ext.tree.AsyncTreeNode({
text: '组织架构',
draggable:false,
id:'01'
}) ,
listeners:{
'click':function(node,event){
// 加载节点信息
getNodeDetail(node);
},
'dblclick' : function(node, event) {
if (node.isLeaf()) {
// 为叶子节点时,点击不进入链接
createTreeEditor().triggerEdit(node);
}
},
//右键
"contextmenu":function(node, e){
var menu = createMenu(node);
//alert(e.getPoint());
menu.showAt(e.getPoint());
},
//节点文本改变时
"textchange":function(node, newText, oldText) {
if(newText!=oldText){
editTreeItem(node,newText);
}
},
// 当节点移动时触发事件
"movenode": function(tree, node,oldParent, newParent, index) {
moveTreeNode(node, oldParent, newParent, index);
}
}
}])
}
})
/**
* 树节点编辑
* @return {}
*/
function createTreeEditor(){
var treePanel = Ext.getCmp('departmentTreePanel');
var treeEditor = new Ext.tree.TreeEditor(treePanel, {
allowBlank : false,
ignoreNoChange : true,
selectOnFocus : true
});
return treeEditor;
}
/**
* 创建菜单
*/
function createMenu(nodeSelected){
var leafMenu = new Ext.menu.Menu({
items : [{
text : "添加",
handler : function() {
var addDeptWindow =
new Rosy.department.DepartmentAddWindow(nodeSelected);
addDeptWindow.show();
}
},"-",{
text : "修改",
handler : function() {
//createTreeEditor().triggerEdit(nodeSelected);
var editDeptWindow =
new Rosy.department.DepartmentEditWindow(nodeSelected);
loadEditNode(nodeSelected);
editDeptWindow.show();
}
},"-", {
text : "删除",
handler : function(){
deleteTreeItem(nodeSelected);
}
}]
});
return leafMenu;
}
/**
* 获取部门信息
* @param {} nodeSelected
*/
function getNodeDetail(nodeSelected){
var tpl = new Ext.Template(
'<p style="font-size:12px"><b>部门ID</b>: {deptId}</p>',
'<p style="font-size:12px"><b>部门名称</b>: {deptName}</p>',
'<p style="font-size:12px"><b>部门描述</b>: {deptDesc}</p>'
);
tpl.compile();
var store = new Ext.data.Store({
url: '/mrp/loadDept.action?deptId='+nodeSelected.id,
reader:new Ext.data.JsonReader(
{root:"pubDept",id:'deptId'},
Ext.data.Record.create([
{name:"deptId" ,mapping: 'deptId'},
{name:"deptName" ,mapping: 'deptName'},
{name:"deptDesc" ,mapping: 'deptDesc'}
])
)
});
// store加载后触发
store.load({
callback:function(records,options,success){
if(success == true){
var el = Ext.getCmp('departmentDetailsPanel').body;
tpl.overwrite(el, store.getAt(0).data);
}else{
Ext.Msg.alert('提示','数据获取出错');
}
}
});
}
/**
* 加载部门信息
* @param {} nodeSelected
*/
function loadEditNode(nodeSelected){
var store = new Ext.data.Store({
url: '/mrp/loadDept.action?deptId='+nodeSelected.id,
reader:new Ext.data.JsonReader(
{root:"pubDept",id:'deptId'},
Ext.data.Record.create([
{name:"pubDept.deptId" ,mapping: 'deptId'},
{name:"pubDept.deptNameZh" ,mapping: 'deptName'},
{name:"pubDept.deptDescZh" ,mapping: 'deptDesc'}
])
)
});
// store加载后触发
store.load({
callback:function(records,options,success){
if(success == true){
Ext.getCmp('departmentEditPanel').getForm()
.loadRecord(records[0]);
}else{
Ext.Msg.alert('提示','数据获取出错');
}
}
});
}
/**
* 删除树结点
* @param {} nodeSelected
*/
function deleteTreeItem(nodeSelected){
var treePanel = Ext.getCmp('departmentTreePanel');
Ext.Msg.confirm("确认删除", "确定要删除所选节点吗?", function(btn) {
if (btn == "yes") {
if (nodeSelected != treePanel.getRootNode()) {
Ext.Ajax.request({
url: '/mrp/delDept.action',
success: function(){
Ext.MessageBox.alert('提示', '删除部门成功.',function(){
var parentNode = nodeSelected.parentNode;
nodeSelected.remove();
if(!parentNode.hasChildNodes()){
parentNode.parentNode.reload();
}
});
},
failure: function(){
Ext.MessageBox.alert('提示', '删除部门出错.');
},
params: { deptId: nodeSelected.id}
});
} else {
Ext.Msg.alert("警告", "不能删除树的根节点!");
}
}
});
}
/**
* 修改树结点
* @param {} nodeSelected
*/
function editTreeItem(nodeSelected,nodeText){
Ext.Ajax.request({
url: '/mrp/editDept.action',
success: function(){
},
failure: function(){
Ext.MessageBox.alert('提示', '修改部门出错.');
},
params: { 'pubDept.deptNameZh': nodeText,
'pubDept.deptId': nodeSelected.id}
});
}
/**
* 移动树结点
* @param {} node
* @param {} oldParent
* @param {} newParent
* @param {} index
*/
function moveTreeNode(node, oldParent, newParent, index){
Ext.Ajax.request({
url: '/mrp/moveDept.action',
success: function(){
},
failure: function(){
Ext.MessageBox.alert('提示', '移动部门节点出错.');
},
params: { 'deptId': node.id,
'oldParentId': oldParent.id,
'newParentId': newParent.id,
'nodeIndex': index}
});
}
分享到:
相关推荐
Ext树例子
该项目实现了树的增删改操作,还有下拉树;该项目的使用说明在压缩包中, 我也是ext的初学者,为了在以后的项目中使用,此处做已备份,希望对大家也有所帮助
Ext树创建说明.rar
EXT 3.0 + SERVLET 开发的EXT树表分页功能. 包里包括了工程相关的所有东西(包括引用的EXT) 下载后部署就可用.
实现ext与JSON的数据传递和显示,以及ext树的事件响应
根据参数决定是单选(radio)还是多选
Ext2.0不仅仅实现了复选框的树形菜单,而且使得在选中某个节点时,如果有子节点,那么就能够将所有的字节点全部选中,当然你也可以直接选择你希望的节点。但是,当你第一次选中某个有子节点但是子节点并没有展开的...
Ext树形菜单(我自己做的)
EXT 树形结构样例:用JSON格式返回数据类型
由于项目的需要最近在学习ext,在项目中必不可少用到了tree,并且要对tree进行增、改、删的操作。上网找了很多不错的学习资料把这些功能组织在一起。在学习ext的过程中花了不少时间,我想很多网友刚开始学习ext的...
ext树 无限级 json 数据格式 动态加载
看看就知道了,不错的下拉树,异步加载树节点,使用Ext做的 下拉树
ext js 下拉树 真正可执行 包括引入的js和css
ext 关于树目录的函数,关键对象,方法的操作说明,和相关ECLIPSE上的插件安装。
Ext下拉列表树,任何版本都可使用,只要下载即可使用。
ext 级联选择的树形控件,有实例用法,不明白的请发邮件到cencai06@163.com
ext带右键菜单的树 ext带右键菜单的树
EXT下拉框显示树形结构源代码EXT下拉框显示树形结构源代码
自己写的ext树,包括撤销和控制选择,都是js文件可以直接调用
ext开发的动态树的生成,里面还有对树的各种增删改操作