ExtJS 使用点滴 十二 ViewPort 嵌套及TreePanel 宽度高度自适应

近来在开发过程中,遇到这样的情况:在Viewport 布局中,实现左二右一排列方式,并且需要在左下嵌入TreePanel,该TreePanel的高度需要随左上的伸缩进行自动适应,经过近两天的苦战,解决了该问题。代码如下,如有不同意见请留言。

///<reference path="http://www.cnblogs.com/../BaseLib/ExtJS/vswd-ext_2.0.2.js" />
Ext.BLANK_IMAGE_URL = "http://www.cnblogs.com/../baselib/extjs/resources/images/default/s.gif";

//项目结构数据
var ProjData = new Ext.data.JsonStore({
    url:"PMS_WBS.ashx?tablename=viewdetail&ParentSysID=0",
    root:"projdata",     //包含数据行集合的属性名字
    totalProperty: "results",  //数据集中全部记录数
    remoteSort:true, // 排序的时候是否通过proxy获得新的数据
      fields: [ {name: 'Col1'},
                {name: 'Col2'},
                {name: 'Col3'}
    ],
    autoLoad : true
});
//作业反馈信息列表
var ProjGrid = new Ext.grid.GridPanel({
    //margins: '2 2 2 2',   
    xtype: 'grid',  
    id: 'id_ProjList',  
    //height:260,  
    //selModel: selModel, //设置单行选中模式
    autoScroll: true,   
    stripeRows:true,
    //collapsible: true,
    selModel:new Ext.grid.RowSelectionModel({singleSelect:true}),//设置单行选中模式
    columns: [ new Ext.grid.RowNumberer(),{
           header: '系统编号', 
           width: 0, 
           align: 'center',
           dataIndex: 'Col1',
           hidden:true
       },{
           header: '项目编号', 
           width:110, 
           align: 'left',
           dataIndex: 'Col2',
           hidden:true
       },
       {
           header: '项目名称', 
           width: 265, 
           align: 'left',
           dataIndex: 'Col3',
           renderer:function (v, params, record)
           {
             return "<div title="+record.data.Col2+">"+v+"</div>";
           }
       }],
      store:ProjData,             
      split: true,
      listeners:{
          click:function()
          {
            var gridProj=Ext.getCmp("id_ProjList");
            var rowProj = gridProj.getSelectionModel().getSelected();
            var wbsid=rowProj.data.Col1;
            if(!rowProj) return;
            if(rowProj.length==0) return;
             Ext.getDom("hidProjID").value=rowProj.data.Col1;
            Ext.getDom("hidWbsID").value='*';           
            getTaskList(true);
            setTimeout("LoadWbsTree()",200);
            
          } 
      }
});

var WBS_Tree= new Ext.tree.TreePanel({       
        xtype:"treepanel",
        id:"treeWBS",               
        expanded: true,  
        anchor:'100% 100%',
        autoScroll:true, 
        rootVisible : false,
        root:new Ext.tree.AsyncTreeNode({
                id : '0', 
                text : 'WBS结构', 
                draggable : false,   //根节点不容许拖动 
                expanded : true                            
            }),
        loader:new Ext.tree.TreeLoader(),    //绑定树的加载器
        listeners:{
            beforeload:function(node){                        
                var id = node.id;
                Ext.getDom("hidNode").value=node.id;
                this.loader.dataUrl = "PMS_WBS.ashx?tablename=view&ParentSysID="+encodeURIComponent(node.id);
               // getTaskList();
            },            
            click:function(node){
                Ext.getDom("hidWbsID").value=node.id;
                getTaskList(false);
            }
        }   
  });
  
Ext.onReady(function(){	
     //初始化信息提示功能
    Ext.QuickTips.init();
    new Ext.Viewport({
		layout: 'border',
		items : [{                    
                region : 'west',                
                width:315,  
                title:'项目及类别信息',            
                collapsible: true,
                split:true,
                //layout: 'fit', 
                frame:false,
                xtype:'panel',
                layout:'anchor',
                layoutConfig:{columns:1},
                items:[
                {                 
                   bodyStyle:'height:200',
                   title:'项目信息',  
                   region:'west',
                   anchor:'100% 28%', //设置子面板的宽高为父面板100%,28%
                   layout: 'fit', 
                   collapsible: true,                  
                   items:[ProjGrid],
                   listeners:{                   
                   'expand':function(panel)
                   {               
                     Ext.getCmp("id_wbs_tree").setSize(panel.getWidth(),panel.ownerCt.getHeight()-panel.getHeight()-28);
                   },                   
                   'collapse':function(panel)
                   {
                     Ext.getCmp("id_wbs_tree").setSize(panel.getWidth(),panel.ownerCt.getHeight()-panel.getHeight()-28);                     
                   }                   
                  }                     
                },
                {
                    title:'计划类别', 
                    split:true,
                    autoScroll:true,
                    id:'id_wbs_tree',          
                    region:'south', 
                    anchor:'100% 72.5%',                    
                    layout: 'fit', 
                    //bodyStyle:'height:100%',                   
                    xtype: 'panel',
                    collapsible: true,                                       
                    items:[WBS_Tree]                    
                }]            
            },{
			title:'作业信息',                     
            layout: 'fit',
            region:'center',            
            xtype: 'panel',
            frame:false,            
            items:[TaskList_Grid]  
	     }]	
	   });
   });       
          
  
function LoadWbsTree()
{    
        var rootNode = Ext.getCmp("treeWBS").getRootNode();
        var loader = Ext.getCmp("treeWBS").getLoader();
        var SysID=Ext.getDom("hidProjID").value;
		// 更新TreeLoader的地址
		loader.dataUrl = "PMS_WBS.ashx?tablename=view&ParentSysID="+encodeURIComponent(SysID)
		// 为根节点重新加载子节点数据
		loader.load(rootNode);
		// 展开根节点的数据
		//rootNode.expand(true,true);
		rootNode.expand(true);
		// getTaskList();
}

  

posted @ 2013-03-05 14:47  FredTang  Views(7301)  Comments(0Edit  收藏  举报