zoukankan      html  css  js  c++  java
  • ext+dwr DynamicGridPanel 封装 态创建ext grid

    封装一个动态grid 继承Ext.grid.GridPanel
    1.一般只需定义gridcolumns属性即可动态生成grid ,支持各列renderer自定义,
    支持store自定义. 其中默认的store,用的是dwrproxy,dwr函数前三个默认参数为(qname,start,pagesize)其他参数在这三个参数之后,
    通过DWRfuncParams属性传入。
    2.需dwr。
    约定:root为data, totalProperty为totalSize

    Js代码

    1. Ext.namespace("Ext.ux.grid");   
    2. /**  
    3.  * @class Ext.ux.grid.DynamicGridPanel  
    4.  * @extends Ext.grid.GridPanel  
    5.  * @author  wujuncheng  
    6.  * @constructor  
    7.  * @param {Object} config A configuration object.  
    8.  */  
    9.     
    10.  /**  
    11.   * demo:  
    12.   * var demoManage = {  
    13.       
    14.    return {  
    15.     init1:function(){  
    16.         //grid 列表头及列表头属性,用于数据映射和表头相关属性定义  
    17.         var gridcolumns =[  
    18.           {dataIndex: 'arArticleId', header:'arArticleId1',200,hidden:false,renderer:demoManage.toArticleRenderer},  
    19.           {dataIndex: 'arShort',header:'arShort2',200,hidden:false},  
    20.           {dataIndex: 'arIscommend', header:'arIscommend3',200,hidden:false},       
    21.           {dataIndex: 'arIshot',header:'arIshot4',200,hidden:false},    
    22.           {dataIndex: 'arIstop',header:'arIstop5',200,hidden:false},  
    23.           {dataIndex: 'arHits',header:'arHits6',200,hidden:false},  
    24.           {dataIndex: 'arStatus',header:'arStatus7',200,hidden:false},  
    25.           {dataIndex: 'arCreatetime',header:'arCreatetime8',200,hidden:false}  
    26.        ]  
    27.        //grid 的配置属性 大部分属性按默认即可,一般只需定义gridcolumns属性  
    28.        this.datagrid = new Ext.ux.grid.DynamicGridPanel({  
    29. //          store:this.store(), //自定store 用法  
    30.           gridcolumns:gridcolumns,  
    31.           DWRfuncParams:[],  
    32.           DWRfunc:demoManageAction.getArticles  
    33.        });  
    34.        this.datagrid.loadData();  
    35.       },  
    36.   toArticle:function (articleId){  
    37.       var url = "articleUpdate.jsp?arArticleId="+articleId;  
    38.       window.location.href=url;  
    39.   },  
    40.   toArticleRenderer:function (articleId){  
    41.         return "<a href='#' class='' onclick='demoManage.toArticle(\""+articleId+"\")'>修改</a>"  
    42.         
    43.   },  
    44.   store:function(){  
    45.       storepage = this;  
    46.       return new Ext.data.GroupingStore({         
    47.            proxy:new Ext.cheping.data.DWRProxy({  
    48.                         dwrFunction: this.Action.getArticles,  
    49.                         listeners: {  
    50.                             'beforeload': function(dataProxy, params){  
    51. //                          storepage.storeParams = storepage.setStoreParams(params.start);  
    52.                             var loadArgs = [  
    53.                                 params.query,  
    54.                                 params.start,  
    55.                                 storepage.defaultPageSize,  
    56.                            ];  
    57.                            params[dataProxy.loadArgsKey] = loadArgs;      
    58.                            }  
    59.                     }  
    60.         })  
    61.        sortInfo:{field: 'fielname', direction: "ASC"}, //使用GroupingStore时必须指定sortInfo信息  
    62.       });  
    63.     },  
    64.   };  
    65.   }  
    66.   */  
    67.   
    68.  Ext.ux.grid.DynamicGridPanel=Ext.extend(Ext.grid.GridPanel, {   
    69.     enableChecked:true, //是否有CheckBox。   
    70.     singleSelect: true,   
    71.     'auto',   
    72.     height:document.body.clientHeight, //高度   
    73.     iconCls :'icon-grid',   
    74.     stripeRows: true,   
    75.     collapsible: true,   
    76.     loadMask: true,   
    77.     animCollapse: false,   
    78.     DWRfuncParams:[],   
    79.     DynamicGridPanel_fields:[],   
    80.     DynamicGridPanel_columns:[],   
    81.     hiddenDefaultTbar:true,   
    82.     GroupingViewConfig:{   
    83.       markDirty: false,    
    84.       forceFit:false,   
    85.       sortAscText :'正序',   
    86.       sortDescText :'倒序',   
    87.       columnsText:'列显示/隐藏',   
    88.       groupByText:'依本列分组',   
    89.       showGroupsText:'分组显示',   
    90.       groupTextTpl: '{text} ({[values.rs.length]} 条记录)'  
    91.       },   
    92.            
    93.     //private      
    94.     initComponent: function(){   
    95.         this.initDynamicGridPanelFields();   
    96.         this.initDynamicGridPanelStore();   
    97.         this.DynamicGridPanel_bbar();   
    98.         Ext.ux.grid.DynamicGridPanel.superclass.initComponent.call(this);   
    99.         this.iniDynamicGridPanelGrid();   
    100.         this.initDynamicGridPanel_cm_tbr();   
    101.         this.view= new Ext.grid.GroupingView(this.GroupingViewConfig)   
    102.     },   
    103.     pagingConfig:{       
    104.         pageSize:20,                       
    105.         store: this.store,              
    106.         displayInfo:true,   
    107.         plugins: [new Ext.ux.PageSizePlugin()],   
    108.         displayMsg: "当前记录:{0} - {1} 条  总共{2} 条",   
    109.         emptyMsg: "<b>0</b> 条记录"  
    110.     },   
    111.     //private   
    112.     iniDynamicGridPanelGrid:function(){   
    113.         this.DynamicGridPanelstoreParams = this.setDynamicGridPanelStoreParams(0);   
    114.         if(this.container){   
    115.             this.width = Ext.get(this.container).getComputedWidth(); //宽度   
    116.             this.renderTo=Ext.get(this.container);   
    117.         }   
    118.     },   
    119.     //private   
    120.     initDynamicGridPanelStore:function(){   
    121.         if(this.store){   
    122.             this.store.reader=this.DynamicGridPanel_reader();   
    123.         }else{   
    124.             this.store= this.DynamicGridPanel_store();   
    125.         }   
    126.         this.pagingConfig.store = this.store;    
    127.         this.store.load({params:{start:0,limit:this.pagingConfig.pageSize}});      
    128.     },   
    129.     //private   
    130.     initDynamicGridPanel_cm_tbr:function(){   
    131.         if(!this.cm)   
    132.             if(!this.colModel)    
    133.                 this.colModel=this.DynamicGridPanel_cm();   
    134.           
    135.         if(!this.hiddenDefaultTbar)   
    136.           this.tbar=this.DynamicGridPanel_ToolBar();   
    137.     },   
    138.        
    139.     setDynamicGridPanelStoreParams:function(start){   
    140.             var Params = { params: { start:start} };   
    141.             return Params;   
    142.     },   
    143.     //private   
    144.     initDynamicGridPanelFields:function(){   
    145.         for (var i = 0; i < this.gridcolumns.length; i++) {   
    146.                  this.DynamicGridPanel_fields.push({name:this.gridcolumns[i].dataIndex});   
    147.                  this.DynamicGridPanel_columns.push(this.gridcolumns[i]);   
    148.          }   
    149.     },                
    150.     //private   
    151.     DynamicGridPanel_cm:function(){   
    152.          if (this.enableChecked) {   
    153.                      this.DynamicGridPanel_sm = new Ext.grid.CheckboxSelectionModel({ singleSelect: this.singleSelect, moveEditorOnEnter: true, sortable: false });   
    154.                      var arr = [this.DynamicGridPanel_sm];   
    155.                      arr.push(new Ext.grid.RowNumberer({header:'序号',40}))   
    156.                      var sunfish = this.DynamicGridPanel_columns;   
    157.                      for (var i = 0; i < sunfish.length; i++) {   
    158.                          arr.push(sunfish[i]);   
    159.                      }   
    160.                  }   
    161.                  else {   
    162.     //                 arr = eval('([' + this.columns + '])');   
    163.                      arr = this.DynamicGridPanel_columns;   
    164.                  }   
    165.                  var col = new Ext.grid.ColumnModel(arr);   
    166.                  col.defaultSortable = true;   
    167.            return col;         
    168.     },   
    169.     //private       
    170.     DynamicGridPanel_store:function(){   
    171.          var DynamicGridPanelStoreParams = this;   
    172.            return  new Ext.data.GroupingStore({       
    173.                proxy:new Ext.cheping.data.DWRProxy({   
    174.                             dwrFunction: DynamicGridPanelStoreParams.DWRfunc,   
    175.                             listeners: {   
    176.                                 'beforeload': function(dataProxy, params){   
    177.                                 DynamicGridPanelStoreParams.DynamicGridPanelstoreParams = DynamicGridPanelStoreParams.setDynamicGridPanelStoreParams(params.start);   
    178.                                 var loadArgs = [   
    179.                                     params.qname,   
    180.                                     params.start,   
    181.                                     DynamicGridPanelStoreParams.pagingConfig.pageSize      
    182.                                ];   
    183.                                if(DynamicGridPanelStoreParams.DWRfuncParams.length>0){   
    184.                                   for(var i=0;i<DynamicGridPanelStoreParams.DWRfuncParams.length;i++){   
    185.                                     loadArgs[loadArgs.length]=DynamicGridPanelStoreParams.DWRfuncParams[i];   
    186.                                   }   
    187.                                }   
    188.                                   
    189.                                params[dataProxy.loadArgsKey] = loadArgs;      
    190.                 
    191.                                }   
    192.                         }   
    193.             }),   
    194. //------------------------------------------------------------------------------------------------ //分组表所需       
    195. //     groupField:this.DynamicGridPanel_fields[0],   
    196. //     groupOnSort:true,   
    197.        
    198.      sortInfo:{field: this.gridcolumns[0].dataIndex, direction: "ASC"}, //使用GroupingStore时必须指定sortInfo信息   
    199. //------------------------------------------------------------------------------------------------    
    200.          reader:  this.DynamicGridPanel_reader()   
    201.           });   
    202.     },   
    203.     //private   
    204.     DynamicGridPanel_reader:function(){   
    205.          return new Ext.data.JsonReader({   
    206.                 totalProperty: "totalSize",   
    207.                 root: "data",   
    208.                 fields:this.DynamicGridPanel_fields   
    209.                 });   
    210.     },   
    211.     //private       
    212.     DynamicGridPanel_bbar:function(){   
    213.         this.bbar = new Ext.PagingToolbar(this.pagingConfig);    
    214.     },   
    215.        
    216.     DynamicGridPanel_ToolBar:function(){   
    217.             
    218.      return new Ext.Toolbar(   
    219.          {     
    220.             hidden:this.hiddenDefaultTbar,    
    221.             items:[    
    222.              '->','关键字: ',    
    223.             this.DynamicGridPanel_Search()   
    224.                 ]    
    225.           }   
    226.         );    
    227.     },   
    228.        
    229.     DynamicGridPanel_Search:function(){   
    230.            return srch = new Ext.app.SearchField({   
    231.                     store: this.store,   
    232.                     220,   
    233.                     paramName : 'qname',   
    234.                     Align:'right'  
    235.                 });   
    236.     },   
    237.     loadData:function() {   
    238.         this.getStore().load(this.DynamicGridPanelstoreParams);   
    239.     },   
    240.     getInsertRecord:function(){   
    241.         var obj={};   
    242.         for(var i=0;i<this.DynamicGridPanel_fields.length;i++){   
    243.             obj[this.DynamicGridPanel_fields[i].name]=null;   
    244.         }   
    245.         var record = Ext.data.Record.create(this.DynamicGridPanel_fields);   
    246.         var InsertRecord = new record(obj);   
    247.         return InsertRecord;   
    248.     },   
    249.     getSelectionObjsByName:function(dataName) {   
    250.         if(this.getSelectionModel().getCount()<1){   
    251.             Ext.MessageBox.alert('提示', '请选择数据,可以是多选!');   
    252.             return;                        
    253.         }else{    
    254.                
    255.             var getSelectionRecordsrList=[];   
    256.             for(var i=0; i<this.getSelectionModel().getSelections().length;i++){    
    257.                 if(null!=this.getSelectionModel().getSelections()[i].data[dataName]    
    258.                     && ""!=this.getSelectionModel().getSelections()[i].data[dataName].trim())   
    259.                 getSelectionRecordsrList.push(this.getSelectionModel().getSelections()[i].data[dataName]);   
    260.             }   
    261.             return  getSelectionRecordsrList;   
    262.         }   
    263.     },   
    264.        
    265.     getSelectionObjByName:function(dataName) {   
    266.         if(this.getSelectionModel().getCount()==1){                        
    267.             return  this.getSelectionModel().getSelections()[0].data[dataName];   
    268.         }else{    
    269.             Ext.MessageBox.alert('提示', '请选择数据,并且只能选一条!');   
    270.             return;   
    271.         }   
    272.     },   
    273.     getSelectedObj:function() {   
    274.         if(this.getSelectionModel().getCount()==1){    
    275.             return  this.getSelectionModel().getSelections()[0].data;   
    276.         }else{    
    277.             Ext.MessageBox.alert('提示', '请选择数据,并且只能选一条!');   
    278.             return;   
    279.         }   
    280.     },   
    281.      getFormRecord:function() {   
    282.         if(this.getSelectionModel().getCount()==1){    
    283.             return  this.getSelectionModel().getSelections()[0];   
    284.         }else{    
    285.             Ext.MessageBox.alert('提示', '请选择数据,并且只能选一条!');   
    286.             return;   
    287.         }   
    288.     }   
    289.   
    290. });  

    * @class Ext.ux.grid.DynamicGridPanel

    * @extends Ext.grid.GridPanel

    * @author wujuncheng

    * @constructor

    * @param {Object} config A configuration object.

    */

    /**

    * demo:

    * var demoManage = {

    return {

     init1:function(){

         //grid

        var gridcolumns =[

    {dataIndex: 'arArticleId', header:'arArticleId1',200,hidden:false,renderer:demoManage.toArticleRenderer},

    {dataIndex: 'arShort',header:'arShort2',200,hidden:false},

    {dataIndex: 'arIscommend', header:'arIscommend3',200,hidden:false},    

    {dataIndex: 'arIshot',header:'arIshot4',200,hidden:false}, 

    {dataIndex: 'arIstop',header:'arIstop5',200,hidden:false},

    {dataIndex: 'arHits',header:'arHits6',200,hidden:false},

    {dataIndex: 'arStatus',header:'arStatus7',200,hidden:false},

    {dataIndex: 'arCreatetime',header:'arCreatetime8',200,hidden:false}

    ]

    //grid 属性

    this.datagrid = new Ext.ux.grid.DynamicGridPanel({

    store:this.store(), //用法

    gridcolumns:gridcolumns,

    DWRfuncParams:[],

    DWRfunc:demoManageAction.getArticles

    });

    this.datagrid.loadData();

       },

    toArticle:function (articleId){

    var url = "articleUpdate.jsp?arArticleId="+articleId;

    window.location.href=url;

    },

    toArticleRenderer:function (articleId){

     return "<a href='#' class='' onclick='demoManage.toArticle(\""+articleId+"\")'>

    },

    store:function(){

    storepage = this;

    return new Ext.data.GroupingStore({    

    proxy:new Ext.cheping.data.DWRProxy({

    dwrFunction: this.Action.getArticles,

    listeners: {

    'beforeload': function(dataProxy, params){

    storepage.storeParams = storepage.setStoreParams(params.start);

    var loadArgs = [

      params.query,

    params.start,

    storepage.defaultPageSize,

    ];

    params[dataProxy.loadArgsKey] = loadArgs;  

    }

                    }

    })

    sortInfo:{field: 'fielname', direction: "ASC"}, //时必须指定sortInfo信息

    });

    },

    };

    }

    */

    Ext.ux.grid.DynamicGridPanel=Ext.extend(Ext.grid.GridPanel, {

    enableChecked:true, //。

    singleSelect: true,

    'auto',

    height:document.body.clientHeight, //

    iconCls :'icon-grid',

    stripeRows: true,

    collapsible: true,

    loadMask: true,

    animCollapse: false,

    DWRfuncParams:[],

    DynamicGridPanel_fields:[],

    DynamicGridPanel_columns:[],

    hiddenDefaultTbar:true,

    GroupingViewConfig:{

     markDirty: false, 

    forceFit:false,

    sortAscText :'

    sortDescText :'

    columnsText:'隐藏',

    groupByText:'

    showGroupsText:'

         groupTextTpl: '{text} ({[values.rs.length]}

    },

    //private  

    initComponent: function(){

     this.initDynamicGridPanelFields();

     this.initDynamicGridPanelStore();

     this.DynamicGridPanel_bbar();

     Ext.ux.grid.DynamicGridPanel.superclass.initComponent.call(this);

     this.iniDynamicGridPanelGrid();

     this.initDynamicGridPanel_cm_tbr();

     this.view= new Ext.grid.GroupingView(this.GroupingViewConfig)

    },

    pagingConfig:{   

    pageSize:20,                    

    store: this.store,          

    displayInfo:true,

    plugins: [new Ext.ux.PageSizePlugin()],

    displayMsg: "条 总共{2} 条",

        emptyMsg: "<b>0</b>

    },

    //private

    iniDynamicGridPanelGrid:function(){

     this.DynamicGridPanelstoreParams = this.setDynamicGridPanelStoreParams(0);

     if(this.container){

         this.width = Ext.get(this.container).getComputedWidth(); //

            this.renderTo=Ext.get(this.container);

     }

    },

    //private

       initDynamicGridPanelStore:function(){

     if(this.store){

        this.store.reader=this.DynamicGridPanel_reader();

        }else{

         this.store= this.DynamicGridPanel_store();

        }

     this.pagingConfig.store = this.store;

     this.store.load({params:{start:0,limit:this.pagingConfig.pageSize}});  

    },

    //private

    initDynamicGridPanel_cm_tbr:function(){

     if(!this.cm)

       if(!this.colModel)

                this.colModel=this.DynamicGridPanel_cm();

      

        if(!this.hiddenDefaultTbar)

          this.tbar=this.DynamicGridPanel_ToolBar();

    },

    setDynamicGridPanelStoreParams:function(start){

            var Params = { params: { start:start} };

            return Params;

    },

    //private

    initDynamicGridPanelFields:function(){

        for (var i = 0; i < this.gridcolumns.length; i++) {

                 this.DynamicGridPanel_fields.push({name:this.gridcolumns[i].dataIndex});

    this.DynamicGridPanel_columns.push(this.gridcolumns[i]);

         }

    },            

    //private

    DynamicGridPanel_cm:function(){

         if (this.enableChecked) {

                     this.DynamicGridPanel_sm = new Ext.grid.CheckboxSelectionModel({ singleSelect: this.singleSelect, moveEditorOnEnter: true, sortable: false });

                     var arr = [this.DynamicGridPanel_sm];

                     arr.push(new Ext.grid.RowNumberer({header:'

                     var sunfish = this.DynamicGridPanel_columns;

                     for (var i = 0; i < sunfish.length; i++) {

                         arr.push(sunfish[i]);

                     }

                 }

                 else {

    //                 arr = eval('([' + this.columns + '])');

                     arr = this.DynamicGridPanel_columns;

                 }

                 var col = new Ext.grid.ColumnModel(arr);

                 col.defaultSortable = true;

           return col;     

    },

    //private   

    DynamicGridPanel_store:function(){

         var DynamicGridPanelStoreParams = this;

           return new Ext.data.GroupingStore({   

               proxy:new Ext.cheping.data.DWRProxy({

                            dwrFunction: DynamicGridPanelStoreParams.DWRfunc,

                            listeners: {

                                'beforeload': function(dataProxy, params){

                                DynamicGridPanelStoreParams.DynamicGridPanelstoreParams = DynamicGridPanelStoreParams.setDynamicGridPanelStoreParams(params.start);

                                var loadArgs = [

                                    params.qname,

                                    params.start,

                                    DynamicGridPanelStoreParams.pagingConfig.pageSize  

                               ];

                               if(DynamicGridPanelStoreParams.DWRfuncParams.length>0){

                                  for(var i=0;i<DynamicGridPanelStoreParams.DWRfuncParams.length;i++){

                                   loadArgs[loadArgs.length]=DynamicGridPanelStoreParams.DWRfuncParams[i];

                                  }

                               }

                              

                               params[dataProxy.loadArgsKey] = loadArgs;  

            

                               }

                        }

            }),

    groupField:this.DynamicGridPanel_fields[0],

    groupOnSort:true,

    sortInfo:{field: this.gridcolumns[0].dataIndex, direction: "ASC"}, //时必须指定sortInfo信息

         reader: this.DynamicGridPanel_reader()

          });

    },

    //private

    DynamicGridPanel_reader:function(){

         return new Ext.data.JsonReader({

                totalProperty: "totalSize",

                root: "data",

                fields:this.DynamicGridPanel_fields

                });

    },

    //private   

    DynamicGridPanel_bbar:function(){

    this.bbar = new Ext.PagingToolbar(this.pagingConfig);

    },

    DynamicGridPanel_ToolBar:function(){

        

     return new Ext.Toolbar(

         { 

            hidden:this.hiddenDefaultTbar,

            items:[

             '->','

            this.DynamicGridPanel_Search()

                ]

          }

        );

    },

    DynamicGridPanel_Search:function(){

           return srch = new Ext.app.SearchField({

                    store: this.store,

                    220,

                    paramName : 'qname',

                    Align:'right'

                });

    },

    loadData:function() {

     this.getStore().load(this.DynamicGridPanelstoreParams);

    },

    getInsertRecord:function(){

     var obj={};

     for(var i=0;i<this.DynamicGridPanel_fields.length;i++){

       obj[this.DynamicGridPanel_fields[i].name]=null;

     }

     var record = Ext.data.Record.create(this.DynamicGridPanel_fields);

     var InsertRecord = new record(obj);

     return InsertRecord;

    },

    getSelectionObjsByName:function(dataName) {

     if(this.getSelectionModel().getCount()<1){

       Ext.MessageBox.alert('请选择数据,可以是多选!');

    return;               

    }else{

     

     var getSelectionRecordsrList=[];

     for(var i=0; i<this.getSelectionModel().getSelections().length;i++){

       if(null!=this.getSelectionModel().getSelections()[i].data[dataName]

           && ""!=this.getSelectionModel().getSelections()[i].data[dataName].trim())

     getSelectionRecordsrList.push(this.getSelectionModel().getSelections()[i].data[dataName]);

       }

    return getSelectionRecordsrList;

    }

    },

    getSelectionObjByName:function(dataName) {

     if(this.getSelectionModel().getCount()==1){               

    return this.getSelectionModel().getSelections()[0].data[dataName];

    }else{

    Ext.MessageBox.alert('请选择数据,并且只能选一条!');

    return;

    }

    },

    getSelectedObj:function() {

     if(this.getSelectionModel().getCount()==1){

    return this.getSelectionModel().getSelections()[0].data;

    }else{

    Ext.MessageBox.alert('请选择数据,并且只能选一条!');

    return;

    }

    },

    getFormRecord:function() {

     if(this.getSelectionModel().getCount()==1){

    return this.getSelectionModel().getSelections()[0];

    }else{

    Ext.MessageBox.alert('请选择数据,并且只能选一条!');

    return;

    }

      }

     

    Java代码

    1. public Map extFind(final String hql,final int start,final int pagesize) {   
    2.         List temp = this.getHibernateTemplate().find(getCounthql(hql));   
    3.         long totalSize = temp!=null&&temp.size()>0?Long.parseLong(temp.get(0)+""):0L;   
    4.         //long totalSize = ((Long)this.getHibernateTemplate().find(counthql).iterator().next()).longValue();   
    5.            
    6.         List lst = getHibernateTemplate().executeFind( new  HibernateCallback() {    
    7.              public  Object doInHibernate(Session s)  throws  HibernateException, SQLException {    
    8.                    Query query  =  s.createQuery(hql);    
    9.                    query.setFirstResult(start);    
    10.                    query.setMaxResults(pagesize);                     
    11.                    List list  =  query.list();    
    12.                    return  list;    
    13.                    }    
    14.              });   
    15.         HashMap map = new HashMap();   
    16.         map.put("totalSize", totalSize);   
    17.         map.put("data", lst);   
    18.         return  map;    
    19.     }  
  • 相关阅读:
    指针应用-----链表一
    指针(五)
    指针(四)
    指针(三)
    指针(二)
    指针(一)
    [代码应用]javaSE程序递归删除文件夹下的.bak文件程序源代码
    [ExtJS5学习笔记]第十八节 Extjs5的panel的dockeditems属性配置toolbar
    [ExtJS5学习笔记]第十七节 Extjs5的panel组件增加accodion成为折叠导航栏
    [ExtJS5学习笔记]第十六节 Extjs5使用panel新增的ViewModel属性绑定数据
  • 原文地址:https://www.cnblogs.com/hannover/p/1924473.html
Copyright © 2011-2022 走看看