ExtJS 6 gridPanel绘制表格并填充数据的例子

简介: Ext.grid.Panel 是表格,可以显示数据,我们来看看它的基本用法:View + Store + Model使用上述三个“部分”就可以完整的,最简易的在Ext的世界中绘制一个用于显示数据库中数据的UI View部分的代码 Ext.

Ext.grid.Panel 是表格,可以显示数据,我们来看看它的基本用法:
View + Store + Model
使用上述三个“部分”就可以完整的,最简易的在Ext的世界中绘制一个用于显示数据库中数据的UI

View部分的代码

Ext.define('RUKU.view.hr.HRUserList', {
    extend: 'Ext.grid.Panel',
    xtype: 'hruserlist',
    
    requires:[
        'RUKU.store.hr.HRUserListStore',
        'RUKU.model.hr.HRUserListModel'
    ],
    
    //为View关联上Store
    store: {
         type:'huls'
    },
     
    initComponent:function(){
    
        var me = this;
        me.columns = [
           {text:'胸卡号', dataIndex:'pernr',flex:1},
           {text:'姓名', dataIndex:'ename',flex:1},
           {text:'状态', dataIndex:'pstate',flex:1}
        ];
        
        me.tbar = {
           xtype : "pagingtoolbar", 
           pageSize : 20,
           displayInfo: true
        };
    
        me.callParent(arguments);

    }
    
});

Store部分的代码

Ext.define('RUKU.store.hr.HRUserListStore', {
    extend: 'Ext.data.Store',
    alias: 'store.huls',
    
    //为Store关联上Model
    model: "RUKU.model.hr.HRUserListModel",
    
    proxy: {
            type: 'ajax',
            url: 'hr/userlist.html',
            reader: {
                    type: 'json',
                    rootProperty: 'data'
            }
    },
     
    autoLoad: true
        
});

Model部分的代码:

Ext.define('RUKU.model.hr.HRUserListModel', {
    extend: 'Ext.data.Model',
    
    fields: [
        { name: "pernr" },
        { name: "ename" },
        { name: "pstate"}
    ]

});

上述三部分协作的效果是这样的:
_

就这样

我们先用文字描述一下上述例子,然后上调试信息,看得更清楚

这个例子已经简化到了极点:View Store Model
哪怕用MVC的代码分割方法,也只有M和V,连controller都没有,更不要说ExtJS6 引入的ViewModel了。

Model,也就是Ext.data.Model 仅仅描述 数据的格式。记住只是描述,它并不存储数据,也不负责任何动作。只是描述。

Store,是数据存放的容器。既然是存放,那么首先要获取数据,然后才能存放在Store中。Store中配置的proxy就是获取数据的代码。最关键的是,在Store中配置了 autoLoad: true,这样就一上来就不需要任何动作,就触发了load()行为。

View中直接配置了Store,store直接为grid的colum填充数据了。
下面我们改一下代码,目的是可以利用console在浏览器上显示调试的信息,执行效果如下
_

我们去掉了store文件,改为,为View添加一个controller
在controller中创建一个store,然后执行load()方法,然后在callback方法中,显示console的信息:

代码如下:

View部分的代码

Ext.define('RUKU.view.hr.HRUserList', {
    extend: 'Ext.grid.Panel',
    xtype: 'hruserlist',
    
    requires:[
        'RUKU.store.hr.HRUserListStore',
        'RUKU.controller.hr.testController',
        'RUKU.model.hr.HRUserListModel'
    ],
    //为View配置controller
    controller:'testc',
    //为View屏蔽Store,让controller调用store
    /*     
    store: {
         type:'huls'
    },
      */
    initComponent:function(){
    
        var me = this;
        me.columns = [
           {text:'胸卡号', dataIndex:'pernr',flex:1},
           {text:'姓名', dataIndex:'ename',flex:1},
           {text:'状态', dataIndex:'pstate',flex:1}
        ];
        
        me.tbar = {
           xtype : "pagingtoolbar", 
           pageSize : 20,
           displayInfo: true
        };
    
        me.callParent(arguments);

    }
    
});

Controller部分的代码:

Ext.define('RUKU.controller.hr.testController',{
    extend: 'Ext.app.ViewController',
    alias: 'controller.testc',
    
    init: function(){
        
        var me = this;

        var store = Ext.create('Ext.data.Store', {
               autoLoad: true,
               model: "RUKU.model.hr.HRUserListModel",
               proxy: {
                     type: 'ajax',
                     url: 'hr/userlist.html',
                     reader: {
                           type: 'json',
                           rootProperty: 'data'
                     }
               }
        });
        store.load({
        
              callback: function(records, operation, success) {
                   
                  //alert(success);//显示success:   true or false
                  console.log(records);
                  //alert("类型是:"+typeof(store.getData()));  //object,  这个方法没什么内涵
                  //alert("记录数 :"+store.getCount());        //内涵也不深刻
                  //alert("autoLoad : "+store.getAutoLoad());   //是否自动load,如果是就直接读数据
                   
                  
                  //下面内容是Store中的数据,可以变成字符串显示
                  //正确的说,是store.load()方法返回值的分析
                  var vJon = Ext.encode(records[3]['data']);
                  alert("data : ---" + vJon);                         
                  
                  //var vJon2 = Ext.encode(records[3]['id']);
                  //alert("id : ---" + vJon2);
                  
                  //循环读数据Store
                  /*                   
                  for(i in records[3]['data']){
                     alert(i);
                     var vJon = Ext.encode(records[3]['data']);
                     alert(vJon);
                  }
                  */
                  
              },
              scope: this
        });
        
    }
        
});

Model部分的代码没有发生变化,就不列举了。
上述代码中,重要的是使用了store.load()方法返回值中的数据,把这些数据显示到console中,那么我们就可以利用Chrome浏览器进行调试了。

目录
相关文章
|
3月前
|
JavaScript 开发者
Element UI & Element Plus之改变表格单元格颜色
这篇文章展示了如何在Element UI和Element Plus框架中使用`:cell-style`属性来根据条件改变表格单元格的颜色。
393 0
Element UI & Element Plus之改变表格单元格颜色
|
4月前
Element UI 表格【列宽自适应】
Element UI 表格【列宽自适应】
123 0
|
6月前
【UI】 element ui 表格没有数据时用--填充
【UI】 element ui 表格没有数据时用--填充
161 2
|
6月前
element plus 表格组件怎样在表格中显示图片
element plus 表格组件怎样在表格中显示图片
275 0
|
6月前
|
前端开发 小程序
使用element UI-table表格列宽自适应 【已解决】
使用element UI-table表格列宽自适应 【已解决】
379 0
Element-ui 表格 (Table) 组件中动态合并单元格
Element-ui 表格 (Table) 组件中动态合并单元格
956 0
Element-ui 表格 (Table) 组件中动态合并单元格
|
JavaScript
VUE element-ui之table表格内容样式(颜色)修改
VUE element-ui之table表格内容样式(颜色)修改
929 0
VUE element-ui之table表格内容样式(颜色)修改
|
前端开发
HTML table 表格内容垂直对齐、边框颜色、标题
HTML table 表格内容垂直对齐、边框颜色、标题
56 0
|
JavaScript
element-ui el-table 表格中行高和字体大小调整
element-ui el-table 表格中行高和字体大小调整
3412 0
|
前端开发 容器
Grid布局使用方法
Grid布局使用方法
136 0
Grid布局使用方法