Ext.ux.data.PagingMemoryProxy,用于本地数据前台分页,用法都是我一点点试出来的,不是网上粘贴来复制去的东西

首先声明,我的系统比较老,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只有这六个属性。当然,可以根据自己的需求改源码进行扩展用法,比如实现条件查询功能。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值