//1)先创建一棵树
menuTree = new Ext.tree.TreePanel({});
//2)增加右击事件
menuTree.on('contextmenu',showRightClickMenu,RightClickMenu);
var RightClickMenu = new Ext.menu.Menu({
//右击事件
items:[{
xtype:"button",
text:"添加节点",
icon:"images/icon/menuitem.gif",
pressed:true,
handler : function(tree) {
onInsertNode();
}
},{
xtype:"button",
text:"修改节点",
icon:"images/icon/menuitem.gif",
pressed:true,
handler : function() {
onUpdate();
}
},{
xtype:"button",
text:"删除节点",
icon:"images/icon/menuitem.gif",
pressed:true,
handler : function(tree) {
onDeleteNode();
}
}]
});
function showRightClickMenu(node,e)
{
//先让该节点被选中
node.select();
//参数node是右击的那个节点,即事件源
//参数e是事件对象
this.showAt(e.getPoint());
}
//3)未与数据库相连,只是直接在树上显示
function onInsertNode()
{
Ext.Msg.prompt('请输入新建的节点名称' , '新建标准名称' , this.onInsertNodePrompt , this) ;
}
function onInsertNodePrompt(btn , text)
{
if(btn == 'ok')
{
var selectedNode = menuTree.getSelectionModel().getSelectedNode();
var selectedParentNode = selectedNode.parentNode;
var newNode = new Ext.tree.TreeNode({
text : text
});
if (selectedParentNode == null) {
selectedNode.appendChild(newNode);
}
else
{
selectedParentNode.insertBefore(newNode, selectedNode);
}
setTimeout(function() {
treeEditor.editNode = newNode;
treeEditor.startEdit(newNode.ui.textNode);
}, 10);
}
function onDeleteNode()
{
Ext.Msg.confirm('系统提示' , '你是否确定删除此标准?' , this.onDeleteNodeConfirm , this);
};
function onDeleteNodeConfirm(btn)
{
if(btn == 'yes')
{
var selectedNode = menuTree.getSelectionModel().getSelectedNode();
selectedNode.remove();
}
}
function onUpdate()
{
Ext.Msg.confirm('系统提示' , '你是否确定修改此标准?' , this.onUpdateNode , this);
};
function onUpdateNode()
{
var selectedNode = menuTree.getSelectionModel().getSelectedNode();
Ext.Msg.prompt('请输入修改的节点名称' , '修改名称' , this.onUpdateNodePrompt , this , false , selectedNode.text) ;
}
function onUpdateNodePrompt(btn , text)
{
if(btn == 'ok')
{
var selectedNode = menuTree.getSelectionModel().getSelectedNode();
selectedNode.setText(text) ;
setTimeout(function() {
treeEditor.editNode = selectedNode;
treeEditor.startEdit(selectedNode.ui.textNode);
}, 10);
}
}
//4)与数据库相连,也是只是直接在树上显示
function onInsertNode()
{
Ext.Msg.prompt('请输入新建的节点名称' , '新建标准名称' , this.onInsertNodePrompt , this) ;
}
function onInsertNodePrompt(btn , text)
{
if(btn == 'ok')
{
var selectedNode = menuTree.getSelectionModel().getSelectedNode();
Ext.Ajax.request({
url: action的路径,
method:'post',
params:{name:text,cid:selectedNode.id},
success: function(response, option)
{
var result = response.responseText;
if(result.match('ok'))
{
alert('新增成功!');
menuTree.root.reload();
root.expand();
}
},
failure: function(response, option)
{
}
});
}
}
//该action的路径直接到一个jsp页面
<%@page contentType="application/json;charset=utf-8" import="org.springframework.web.context.support.*,org.springframework.core.io.*,org.springframework.beans.factory.*,org.springframework.beans.factory.xml.*,org.springframework.context.*,org.springframework.context.support.*,com.cssrc.bean.*,com.cssrc.dao.impl.*,com.cssrc.dao.*,java.util.List" %>
<%
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String str[] = name.split(" ");
String code = "";
if(str.length==2)
{
code = str[1];
}
String cid = request.getParameter("cid");
int id = Integer.parseInt(cid);
ServletContext sc = request.getSession().getServletContext();
ApplicationContext ac =WebApplicationContextUtils.getWebApplicationContext(sc);//很重要获得dao
IMenuItemDAO dao = (IMenuItemDAO)ac.getBean("MenuItemDAO");
MenuItem m = dao.findById(id);
MenuItem mi = new MenuItem();
mi.setMenuBar(m.getMenuBar());
mi.setImage("menuitem.gif");
if(m.getItemCode()==1)//当前是一级菜单
{
mi.setParentId(m.getId());
List l = dao.findByProperty("parentId",m.getId());
if(l.size()==1)
{
mi.setDisplayOrder(2);
}
else
{
MenuItem t = (MenuItem)l.get(l.size()-1);
mi.setDisplayOrder(t.getDisplayOrder()+1);
}
mi.setItemCode(2);
mi.setItemName(name);
mi.setClickEvent("item.jsp");
}
else if(m.getItemCode()==2)
{
mi.setParentId(m.getId());
List l = dao.findByProperty("parentId",m.getId());
if(l.size()==0)
{
mi.setDisplayOrder(1);
}
else if(l.size()==1)
{
mi.setDisplayOrder(2);
}
else
{
MenuItem t = (MenuItem)l.get(l.size()-1);
mi.setDisplayOrder(t.getDisplayOrder()+1);
}
mi.setItemCode(3);
mi.setItemName(name);
mi.setClickEvent("standard/standardlistAction?type="+code+"");
}
dao.save(mi);
response.getWriter().write(
"ok");
%>
function onDeleteNode()
{
Ext.Msg.confirm('系统提示' , '你是否确定删除此标准?' , this.onDeleteNodeConfirm , this);
};
function onDeleteNodeConfirm(btn)
{
if(btn == 'yes')
{
var selectedNode = menuTree.getSelectionModel().getSelectedNode();
Ext.Ajax.request({
url: context+'/node/nodedelete.action',
method:'post',
params:{cid:selectedNode.id},
success: function(response, option)
{
var result = response.responseText;
var str1 = 'ok';
var str2 = 'cancel';
if(result.match(str2))
{
alert('该节点不能删除!');
}
if(result.match(str1))
{
alert('删除成功!');
menuTree.root.reload();
root.expand();
}
},
failure: function(response, option)
{
}
});
}
}
function onUpdate()
{
Ext.Msg.confirm('系统提示' , '你是否确定修改此标准?' , this.onUpdateNode , this);
};
function onUpdateNode()
{
var selectedNode = menuTree.getSelectionModel().getSelectedNode();
Ext.Msg.prompt('请输入修改的节点名称' , '修改名称' , this.onUpdateNodePrompt , this , false , selectedNode.text) ;
}
function onUpdateNodePrompt(btn , text)
{
if(btn == 'ok')
{
var selectedNode = menuTree.getSelectionModel().getSelectedNode();
Ext.Ajax.request({
url: context+'/node/nodeupdate.action',
method:'post',
params:{name:text,cid:selectedNode.id},
success: function(response, option)
{
var result = response.responseText;
var str1 = 'ok';
var str2 = 'cancel';
if(result.match(str2))
{
alert('该节点不能修改!');
}
if(result.match(str1))
{
alert('修改成功!');
menuTree.root.reload();
root.expand();
}
},
failure: function(response, option)
{
}
});
分享到:
相关推荐
ext带右键菜单的树 ext带右键菜单的树
EXT tree 使用 实例 最新 EXT使用实例,很漂亮。
Ext.net数据库后台分页,树状图,Grid增删改查,由于公司下个项目要用到Ext.net,所以就写了一个小小的列子,说实话Ext.net网上资源太少了!一直在琢磨中!
一个不错Ext Tree 自己去下个EXT2.0库吧
ext tree 与ssh2的结合,主要演示ext在ssh2中的使用
ext开发的动态树的生成,里面还有对树的各种增删改操作
用ext + xml文件 完成 ext tree panel 树结构。延迟加载,支持 多选 单选。前后台数据交互使用的是 json串,挺不错的
一个关于extTree的应用,点击会弹出界面啊,等等
EXT TREE 扩展CHECKBOX所需JS loader方法中添加: baseAttrs: {uiProvider: Ext.tree.TreeCheckNodeUI }
该项目实现了树的增删改操作,还有下拉树;该项目的使用说明在压缩包中, 我也是ext的初学者,为了在以后的项目中使用,此处做已备份,希望对大家也有所帮助
刚刚学ext感觉还好,第一次使用做了个增删改,和登录。
NULL 博文链接:https://scmky.iteye.com/blog/1174740
实现的树的增删改操作,并且添加了权重,及树节点的排列顺序, 备以后使用,同时希望能为用的的兄弟姐妹提供以下帮助,不足之处希望多多指点
博文链接:https://kingapex.iteye.com/blog/150806
但是美中不足就是体积太大,前不久做项目的时候遇到这个问题,恰好发现里面一个压缩过的 Ext.js只有200K,但是已经能够构建一个完整的ExtTree,于是就花了点时间把它改造成一个xml To ExtTree的这样一个小控件,分享...
自己编写的EXT例子,grid、tree从数据库读取数据动态显示,并进行分页。可以动态更换主题,并存入cookies中。
ext tree json 例子(不含EXT包)
关于Ext Tree Panel,相关的知识文档
Ext tree 实现的是一棵异步加载的Tree,完整Demo项目,导入Eclipse就可以运行
在extjs中加载大量树节点时会卡死,用于解决大量数据加载。