Ext3 动态加载Accordion布局面板和树菜单

主要步骤:

第一步:

布局
/*************主面板开始***********************/
 var mainPanel = new Ext.Panel({
  id : "mainPanel",
  layout : "border",
  items:[{
   region:"north",
   height:100,
   layout:"fit",
   frame:true,
   items:headPanel
  },{
   region:"south",
   height:30,
   layout:"fit",
   frame:true,
   items:footPanel
  },
  {
   /*frame:true,*/
   region:"west",
   width:200,
   title:"菜单",
   lines:false,
   autoScroll: true,
   layout:"fit",
//	可收缩面板
   collapsible: true,
//	可拉动边框
   split:true,
   items:menuPanel
   
  },{
   region:"center",
   layout:"fit",
   items:centerPanel
  }]
 });
 /*************主面板结束***********************/

 new Ext.Viewport({items:mainPanel,layout:'fit'});


第二部:
左边菜单面板Accordion布局,动态添加面板和面板的树

 var menuPanel = new Ext.Panel({
  id:"menuPanel",
  layout:"accordion",//布局
  layoutConfig: {  
//            activeOnTop: true,  //设置打开的字面板置顶  
            fill: true,         //字面板充满父面板的剩余空间  
            hideCollapseTool: false,   //显示“展开收缩”按钮  
            titleCollapse: true,      //允许通过点击子面板的标题来展开或者收缩面板  
            animate: true,             //使用动画效果  
            autoWidth:true
         },
        listeners :{
          "beforerender":function(){
           Ext.Ajax.request({  
              url:"/LibrarySystem/menu/Menu_getMenus",  
//传输的json格式:[{'id':'1','iconCls':'setting','text':'系统管理','leaf':false},{'id':'3','iconCls':'team','text':'人员管理','leaf':false},{'id':'7','iconCls':'book1','text':'图书管理','leaf':false},{'id':'19','iconCls':'bookdetail1','text':'借阅管理','leaf':false},{'id':'9','iconCls':'bookp0','text':'图书借阅','leaf':false},{'id':'27','iconCls':'message0','text':'通知信息','leaf':false}]
              success:function(res){  
                 //如果服务器返回的json串是一个数组  
                 var obj = Ext.decode(res.responseText);  
                 for(var i = 0;i<obj.length;i++){
                  var treePanel = createTree(obj[i].id); //创建一棵树,并且将树的id传递给树根(根节点就是 和accordion的子面板的属性一样,此处必须用菜单的id作为节点id)
                  menuPanel.add({  //添加accordion布局的子面板,并添加其属性
                   id:"menu"+obj[i].id,//面板id,为了和树节点区分所以在前面加了一个menu
                   title:obj[i].text,//现实的菜单内容
                   iconCls:obj[i].iconCls,//自定义图标
                   items:treePanel//将树面板放到accordion子面板中
                  });
                 }
                 menuPanel.doLayout();  
              }  
           });
          },
         }
 });
----------------右侧主要显示区域 Tab面板-------------------
var centerPanel = new Ext.Panel({
  id:"centerPanel",
  layout : "fit",
  items:mainTabPanel
 });

var mainTabPanel = new Ext.TabPanel({
  /* 内容 */
  id : "mainTabPanel",
  margins:"0 10 0 0",
  /*title : "内容",*/
  xtype : "tabpanel",
  activeTab : 0,
  items : [ {
   id : "welcome",
   title : "欢迎页面",
   iconCls : 'application_homeIcon',
   layout : "fit",
   html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/welcome/welcome.html></iframe>',
  } ]
 });

-------------------创建根节点----------------------------------
 function createRoot(id){
  return new Ext.tree.AsyncTreeNode({
   text : "菜单根节点",
   id : id,
   leaf : false
  });
---------------------创建子节点-----------------------------------------
 function createTree(id){
  return new Ext.tree.TreePanel({
   root : createRoot(id),
   loader : mainLoader, //自动请求服务器,返回子节点
//子节点返回数据格式:[{'id':'4','iconCls':'role','text':'人员角色管理','leaf':true},{'id':'5','iconCls':'userIcon','text':'人员账号管理','leaf':true},{'id':'6','iconCls':'position','text':'人员信息管理','leaf':true},{'id':'10','iconCls':'username','text':'个人信息管理','leaf':true},{'id':'11','iconCls':'password','text':'修改密码','leaf':true},{'id':'25','iconCls':'log','text':'人员管理日志','leaf':true}]
   border:false,
   lines:false,
   rootVisible : false,
   enableTabScroll:true,
   listeners : {
    click : function(node, event) {
     event.stopEvent();// 阻止默认的事件
     if (node.isLeaf()) {
      // 叶子节点事件处理
      var tab = Ext.getCmp("mainTabPanel");
      // 此处可以进行ajax请求,获取autoLoad的路径
      //ajax请求url路径
      Ext.Ajax.request({
          url : "/LibrarySystem/menu/Menu_getMenusById",
          params: { id:node.id},
          success: function(response){
           var resultObject =  Ext.decode(response.responseText);
           var resultStateEnd = resultObject.url.split(".")[1];
           if(resultStateEnd=="jsp" || resultStateEnd=="html"){
            tab.add({
           id : node.id + "Tab",
           title : node.text,
           iconCls:resultObject.iconCls,
           html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src='+resultObject.url+'></iframe>',
           closable : true
          });
//	显示当前打开的面板
            tab.setActiveTab(node.id + "Tab");
           }else{
            tab.add({
           id : node.id + "Tab",
           title : node.text,
           html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/error/error.html></iframe>',
           closable : true
          });
//	显示当前打开的面板
            tab.setActiveTab(node.id + "Tab");
           }
          },
          failure: function(){
           Ext.Msg.show({
            title:"警告",
            msg:"请求数据失败",
            buttons:Ext.Msg.OK,
            icon: Ext.MessageBox.WARNING
           });
           tab.add({
          id : node.id + "Tab",
          title : node.text,
          html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/error/error.html></iframe>',
          closable : true
         });
//	显示当前打开的面板
           tab.setActiveTab(node.id + "Tab");
          }
       });
     } else {
      // 单击菜单显示或者隐藏
      node.toggle();
     }
    }
   }
  });
 }




Ext.onReady(function(){
 
 
 /** **************树根开始****************************** */
 function createRoot(id){
  return new Ext.tree.AsyncTreeNode({
   text : "菜单根节点",
   id : id,
   leaf : false
  });
 }
 
 var mainLoader = new Ext.tree.TreeLoader({
  url : "/LibrarySystem/menu/Menu_getMenus",
  baseParams : {
   id:""
  }

 });
 mainLoader.on("beforeload", function(loader, node) {
  loader.baseParams.id = (node.id == "root" ? "":node.id );
 });

 /****************树根结束****************************** */
 
 /*************头部面板开始***********************/
 var headPanel = new Ext.Panel({
  id:"headPanel",
  autoLoad:"/LibrarySystem/app/foot/head.html"
 });
 /*************头部面板开始***********************/
 
 /*************尾部面板开始***********************/
 var footPanel = new Ext.Panel({
  id:"footPanel",
  autoLoad:"/LibrarySystem/app/foot/foot.html"
 });
 /*************尾部面板结束***********************/
 
 
 /*************主要内容面板开始***********************/
 
 var mainTabPanel = new Ext.TabPanel({
  /* 内容 */
  id : "mainTabPanel",
  margins:"0 10 0 0",
  /*title : "内容",*/
  xtype : "tabpanel",
  activeTab : 0,
  items : [ {
   id : "welcome",
   title : "欢迎页面",
   iconCls : 'application_homeIcon',
   layout : "fit",
   html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/welcome/welcome.html></iframe>',
  } ]
 });
 
 var centerPanel = new Ext.Panel({
  id:"centerPanel",
  layout : "fit",
  items:mainTabPanel
 });
 
 var menuPanel = new Ext.Panel({
  id:"menuPanel",
  layout:"accordion",
  layoutConfig: {  
//            activeOnTop: true,  //设置打开的字面板置顶  
            fill: true,         //字面板充满父面板的剩余空间  
            hideCollapseTool: false,   //显示“展开收缩”按钮  
            titleCollapse: true,      //允许通过点击子面板的标题来展开或者收缩面板  
            animate: true,             //使用动画效果  
            autoWidth:true
         },
         listeners :{
          "beforerender":function(){
           Ext.Ajax.request({  
              url:"/LibrarySystem/menu/Menu_getMenus",  
              success:function(res){  
                 //如果服务器返回的json串是一个数组  
                 var obj = Ext.decode(res.responseText);  
                 for(var i = 0;i<obj.length;i++){
                  var treePanel = createTree(obj[i].id);
                  menuPanel.add({  
                   id:"menu"+obj[i].id,
                   title:obj[i].text,
                   iconCls:obj[i].iconCls,
                   items:treePanel
                  });
                 }
                 menuPanel.doLayout();  
              }  
           });
          },
         }
 });
 /*************主要内容面板结束***********************/
 
 function createTree(id){
  return new Ext.tree.TreePanel({
   root : createRoot(id),
   loader : mainLoader,
   border:false,
   lines:false,
   rootVisible : false,
   enableTabScroll:true,
   listeners : {
    click : function(node, event) {
     event.stopEvent();// 阻止默认的事件
     if (node.isLeaf()) {
      // 叶子节点事件处理
      var tab = Ext.getCmp("mainTabPanel");
      // 此处可以进行ajax请求,获取autoLoad的路径
      //ajax请求url路径
      Ext.Ajax.request({
          url : "/LibrarySystem/menu/Menu_getMenusById",
          params: { id:node.id},
          success: function(response){
           var resultObject =  Ext.decode(response.responseText);
           var resultStateEnd = resultObject.url.split(".")[1];
           if(resultStateEnd=="jsp" || resultStateEnd=="html"){
            tab.add({
           id : node.id + "Tab",
           title : node.text,
           iconCls:resultObject.iconCls,
           html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src='+resultObject.url+'></iframe>',
           closable : true
          });
//	显示当前打开的面板
            tab.setActiveTab(node.id + "Tab");
           }else{
            tab.add({
           id : node.id + "Tab",
           title : node.text,
           html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/error/error.html></iframe>',
           closable : true
          });
//	显示当前打开的面板
            tab.setActiveTab(node.id + "Tab");
           }
          },
          failure: function(){
           Ext.Msg.show({
            title:"警告",
            msg:"请求数据失败",
            buttons:Ext.Msg.OK,
            icon: Ext.MessageBox.WARNING
           });
           tab.add({
          id : node.id + "Tab",
          title : node.text,
          html:'<iframe id=mainPage width="100%" height="100%" frameborder=0 src=/LibrarySystem/app/error/error.html></iframe>',
          closable : true
         });
//	显示当前打开的面板
           tab.setActiveTab(node.id + "Tab");
          }
       });
     } else {
      // 单击菜单显示或者隐藏
      node.toggle();
     }
    }
   }
  });
 }
 
 /*************主面板开始***********************/
 var mainPanel = new Ext.Panel({
  id : "mainPanel",
  layout : "border",
  items:[{
   region:"north",
   height:100,
   layout:"fit",
   frame:true,
   items:headPanel
  },{
   region:"south",
   height:30,
   layout:"fit",
   frame:true,
   items:footPanel
  },
  {
   /*frame:true,*/
   region:"west",
   width:200,
   title:"菜单",
   lines:false,
   autoScroll: true,
   layout:"fit",
//	可收缩面板
   collapsible: true,
//	可拉动边框
   split:true,
   items:menuPanel
   
  },{
   region:"center",
   layout:"fit",
   items:centerPanel
  }]
 });
 /*************主面板结束***********************/
 new Ext.Viewport({items:mainPanel,layout:'fit'});
});


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值