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浏览器进行调试了。

目录
相关文章
|
4天前
【UI】 element ui 表格没有数据时用--填充
【UI】 element ui 表格没有数据时用--填充
17 2
PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
590 0
PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
|
3月前
element plus 表格组件怎样在表格中显示图片
element plus 表格组件怎样在表格中显示图片
53 0
|
3月前
|
前端开发 小程序
使用element UI-table表格列宽自适应 【已解决】
使用element UI-table表格列宽自适应 【已解决】
|
8月前
|
JavaScript
element-ui el-table 表格中行高和字体大小调整
element-ui el-table 表格中行高和字体大小调整
1889 0
|
Web App开发 前端开发 iOS开发
Element-ui中 表格 (Table)组件中滚动条样式修改
Element-ui中 表格 (Table)组件中滚动条样式修改
1040 0
Element-ui中 表格 (Table)组件中滚动条样式修改
同时改变两个表格的宽 element ui
需求是两个表格,改变其中一个表格列的宽,另一个表格也随之相应改变同等宽度。
196 0
PyQt5 技术篇-设置QTableWidget表格组件默认值实例演示,如何获取QTableWidget表格组件里的值,获取表格的行数和列数
PyQt5 技术篇-设置QTableWidget表格组件默认值实例演示,如何获取QTableWidget表格组件里的值,获取表格的行数和列数
549 0
PyQt5 技术篇-设置QTableWidget表格组件默认值实例演示,如何获取QTableWidget表格组件里的值,获取表格的行数和列数
实例1、用TableLayoutPanel 制作表格
实例1、用TableLayoutPanel 制作表格
640 0
实例1、用TableLayoutPanel 制作表格