首先声明,我的系统比较老,extjs是3.4.0版本,以下内容全部基于该版本。
其次,引入的PagingMemoryProxy.js就是从这里来
Ext7借助PagingMemoryProxy实现前台分页_猿猿猿猿猿猿的博客-CSDN博客
😄他的组件js上边就写明了是3.4.0版本的。
var data = [
{ code: "1001", name: "wind", num: "18603071234" },
{ code: "1002", name: "小月", num: "18603073578" },
{ code: "1003", name: "冷清雪", num: "18603073569" },
{ code: "1004", name: "布隆", num: "18603073214" },
{ code: "1005", name: "莫甘娜", num: "18603072568" },
{ code: "1006", name: "阿里", num: "18603073247" },
{ code: "1001", name: "阿卡丽", num: "18603071563" },
{ code: "1001", name: "卡特", num: "18603074758" },
{ code: "1001", name: "死歌", num: "18603072354" }
];
var store = new Ext.data.Store({
proxy: new Ext.data.PagingMemoryProxy(data),
reader: new Ext.data.JsonReader({}, ["code", "name", "num"]),
fields: ["code", "name", "num"]
});
var gridPanel = new Ext.grid.GridPanel({
// 其他配置项
store : store,
bbar : new Ext.PagingToolbar( {store : store,pageSize : 5,displayInfo : true,displayMsg : "显示{0} - {1} 记录,总共 {2}条记录", beforePageText : "第",afterPageText : "页,共{0}页",emptyMsg : "<span style='color:red'>结果为空</span>"})
});
store.baseParams={start:0,limit:5};
store.load();
代码如上,跟PagingMemoryProxy分页相关的重点代码我都展示出来了。Ext.grid.GridPanel的其余配置项不在本文讨论范围。
接下来分析PagingMemoryProxy.js源码:
一、构造器函数:
constructor : function(data){
Ext.ux.data.PagingMemoryProxy.superclass.constructor.call(this);
this.data = data;
},
从构造器可以看出,当new一个PagingMemoryProxy对象时,只有一个唯一入参,名为data,顾名思义,这个参数应当就是数据数组。
(注意:有些文章把data放在Store里作为一个配置项,例如:new Ext.data.Store({data:data})。这种写法是错的,至少在ext3.4版本里是错的)
二、doRequest函数上半部分:
doRequest: function(action, rs, params, reader, callback, scope, options) {
params = params ||
{};
var result;
try {
result = reader.readRecords(this.data);
}
catch (e) {
this.fireEvent('loadexception', this, options, null, e);
callback.call(scope, null, options, false);
return;
}
// filtering
// 省略
// sorting
// 省略
// paging (use undefined cause start can also be 0 (thus false))
// 省略
}
doRequest函数看名字也猜到他的作用了。就是远程请求数据,但是本组件数据都是本地的,所以直接
result = reader.readRecords(this.data);
这里的reader就是最上边示例代码中Ext.data.Store的配置项
reader: new Ext.data.JsonReader({}, ["code", "name", "num"])
(注意:有些文章new一个PagingMemoryProxy对象时,给了个莫名奇妙的参数,并试图在该参数里配置reader,该写法在本文ext版本中是错的,new PagingMemoryProxy()的唯一入参只有data)
三、doRequest函数下半部分:
函数下半部分主要是对params的处理,该参数就是Ext.data.Store的配置项baseParams,即示例代码中
store.baseParams={start:0,limit:5};
在store.load()之前必须先指定start和limit的初始值(否则表格加载数据后直接就把所有的数据显示出来了),后续点击bbar里的翻页按钮时组件会自动更新start和limit。
(注意:每页数量的配置,必须在GridPanel的bbar中配置pageSize,有些文章会在Ext.data.Store中配置pageSize,这个写法在3.4.0中是错的)
以上,即是关于分页相关的全部内容。
以下,是关于doRequest的参数params的(该参数来源于store.baseParams):
直接给结论,该参数可以有六个属性。
start、limit:分页相关,不再赘述;
sort:列名,用于指定哪一列来排序;
dir:排序方向;
filterCol:列名,用于指定哪一列来进行条件判断;
filter:过滤条件,filterCol指定的那一列不匹配filter的就被过滤不显示。
在不改动PagingMemoryProxy.js源码的前提下,params只有这六个属性。当然,可以根据自己的需求改源码进行扩展用法,比如实现条件查询功能。