ExtJS Tree刷新后只选择节点,不展开
实例讲解:通过点击岗位,将岗位对应的模块菜单给展开。
1..先对树进行全面加载(无须获取Path路径了):
moduleloader.on("load",function(treeLoader, node){
//将树面板先展开再关闭,用于将所有子节点显示出来!
module_tree.expandAll(); //注意!此处是将树面板全部展开!!!而不是节点!!!
module_tree.collapseAll();
module_root.expand();//展开根节点
}
注意:
必须全部展开,各级目录下的所有叶子节点才能充分加载完全!若未加载则为“undifined”,无法被勾选。
2.点击岗位获取对应模块菜单ID:
function check(node,checked){
if(checked == true){
//得到岗位对应的功能
Ext.Ajax.request({
url : 'user.up?doType=getModuleById',
params : {postID : node.id},
success : function(response, options) {
checkModuleid = response.responseText;
showCheckModules();
//module_root.reload();
}
});
}
}
结果示例:{03,0302,0305,05,0504}
3.将对应选项进行勾选,但不展开:
function showCheckModules(){
//先清楚所有勾选项
var treeNodes = module_root.childNodes;
for (var i = 0; i < treeNodes.length; i++) {
var id = treeNodes[i].id;
var node = module_tree.getNodeById(id);
node.ui.toggleCheck(false);
}
//再将对应的给勾选上
var ids = checkModuleid?checkModuleid.split(","):null;
if(!ids){//ids为空则返回
return;
}
for (var i = 0; i < ids.length; i++) {
var id = ids[i];
if(id.length == 4){
var node = module_tree.getNodeById(id);//通过id获取节点
node.ui.toggleCheck(true);//选中节点
}
}
}
注意:
1.这种方式必须先把树全部展开一遍,即全部加载一遍,所以Sql查询时必须一次性全查出来
2.刷新后展开的无须一次性全部加载完!
4.加载菜单树:
Servlet:
if("getModuleTree".equals(action)){//得到菜单树
response.setContentType("text/html;charset=UTF-8");
String pid=request.getParameter("pid")==null?"":request.getParameter("pid");
if("module_root_value".equals(pid)){
pid="";
}
String sloadAll=request.getParameter("loadAll");
int loadAll = 1;//注意此处为1时为一次性加载,为0时为分级加载(点击目录才加载)
try{
loadAll=Integer.parseInt(sloadAll);
}catch(Exception e){}
List list = uDao.getModuleList(pid,loadAll);
json = uDao.getTreeNodesOfJson(list, loadAll, pid);
out = response.getWriter();
out.print(json);
out.close();
return;
}
Dao:
public List getModuleList(String pid, int loadAll) {
List list = new ArrayList();
Session s = null;
try {
s = HibernateUtil.getSession();
s.beginTransaction();
StringBuffer sql = new StringBuffer(
"select * from(select moduleid,name,pid,qybj,isleaf from modules t where qybj=1 and enable = 1 start with moduleid in(select moduleid from modules where pid is null) connect by prior moduleid = pid order by dorder)");
if (loadAll == 0) {// 分级加载
if (pid == null || "".equals(pid))
sql.append(" where pid is null ");
else
sql.append(" where pid='").append(pid + "'");
} else {
if (pid != null && !"".equals(pid))
sql.append(" where pid='").append(pid + "'");
}
SQLQuery query = s.createSQLQuery(sql.toString());
List lst = query.list();
if (lst != null && lst.size() > 0) {
for (int i = 0; i < lst.size(); i++) {
Object[] flds = (Object[]) lst.get(i);
UserSimpleBean sBean = new UserSimpleBean();
sBean.setBm((String) flds[0]);
sBean.setMc((String) flds[1]);
sBean.setPid((String) flds[2]);
sBean.setIsLeaf(((BigDecimal) flds[4]).intValue());
list.add(sBean);
}
}
s.getTransaction().commit();
} catch (Throwable e) {
log.error(e.toString());
HibernateUtil.endSession(s);
} finally {
HibernateUtil.endSession(s);
}
return list;
}
Sql语句:
select * from(select moduleid,name,pid,qybj,isleaf from modules t where qybj=1 and enable = 1 start with moduleid in(select moduleid from modules where pid is null) connect by prior moduleid = pid order by dorder)
注意:
分级加载时加上了“where pid = ?”的条件。
图示:
1.点击岗位勾选相应菜单,不展开
2.点击菜单展开:
- 大小: 11.3 KB
- 大小: 4.9 KB
- 大小: 11.7 KB
分享到:
相关推荐
区别在于,远程脚本调用方式加载树节点信息使用的是WebInvokeTreeLoader,需要通过fn属性来指定用于加载数据的远程方法,并在...而传统的树节点加载器是Ext.tree.TreeLoader,需要指定一个url来获得json数据。
ExtJs Tree
ExtJs 2.2.1 tree实例,内附mysql数据文件 1. 数据节点一次性加载 2. 节点分为两个类(项目和设备) 3. 右键菜单 4. 节点增、删、改操作 ....... 后台是java struts1。 本例旨在说明extjs的tree操作,后台操作很简陋...
Extjs的tree Extjs的tree Extjs的tree Extjs的tree Extjs的tree
最近在学习extjs tree,有两个不错的例子,希望对需要的朋友有所帮助!
extjs tree 异步加载树型完整的一个web工程,自已已经试过,可用。
完美的Extjs4 treePanel节点刷新,函数为自动刷新选中的节点.API看得头疼才别出来的代码.截止我发之前,好像没有谁共享这个功能的函数吧.
extjs tree 学习资料extjs tree 学习资料extjs tree 学习资料extjs tree 学习资料
ExtJs4 Checkbox tree
extjs的tree的使用.doc
Extjs动态树的实现以及节点拖拽
Extjs Tree + JSON + Struts2 示例源代码
Extjs Tree + JSON + Struts2 例子
TreePanel的各项属性能帮助我们动态加载extjs tree
access 数据库,可增加 删除树节点!!
Ext各种组件的使用实例,Extjs tree+grid+form+panel 使用实例
利用extjs框架实现的后台经典显示, tree框架,动态加载。
在网上下载别人的代码,改进加上CHECKBOX ,但是批量删除做不出来,希望高手完成并分享。
将文件拷贝到extjs根目录下。运行即可。实现了选中之类。父类联动选中
分享一个ExtJs Tree, 完整的带有复选框的树形结构