分享

ext tree右键功能

 昵称3661796 2010-11-24
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)
                        {
                           
                        }
           });
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/y_h_t/archive/2009/12/08/4966222.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约