详解Ext分页Grid

Ext.onReady(function() {

	var store = getJsonStore();
	var cols = getCols();
	var pagingbar = getPagingBar(store);

	var grid = new Ext.grid.GridPanel({
		width : 700,
		height : 500,
		title : ‘ExtJS.com - Browse Forums‘,
		store : store,
		trackMouseOver : true,
		disableSelection : false,
		loadMask : true,

		columns : cols,

		viewConfig : {
			forceFit : true
		},

		bbar : pagingbar
	});

	window.data = {};
	window.data[‘grid‘] = grid;

	grid.render(Ext.getBody());

	store.load({
		params : {
			start : 0,
			limit : 25
		}
	});
});

function renderTopic(value, p, record) {
	return String.format(‘<b><a href="http://extjs.com/forum/showthread.php?t={1}" target="_blank">{0}</a></b><a href="http://extjs.com/forum/forumdisplay.php?f={3}" target="_blank">{1} Forum</a>‘, value, record.data.forumtitle, record.id, record.data.forumid);
}

function renderLast(value, p, r) {
	return String.format(‘{0}<br/>by {1}‘, value.dateFormat(‘M j, Y, g:i a‘),
			r.data[‘lastposter‘]);
}

function getJsonStore() {

	var store = new Ext.data.JsonStore({
		root : ‘topics‘,
		totalProperty : ‘totalCount‘,
		idProperty : ‘threadid‘,
		remoteSort : true,

		fields : [ ‘title‘, ‘forumtitle‘, ‘forumid‘, ‘author‘, {
			name : ‘replycount‘,
			type : ‘int‘
		}, {
			name : ‘lastpost‘,
			mapping : ‘lastpost‘,
			type : ‘date‘,
			dateFormat : ‘timestamp‘
		}, ‘lastposter‘, ‘excerpt‘ ],

		proxy : new Ext.data.ScriptTagProxy({
			url : ‘http://extjs.com/forum/topics-browse-remote.php‘,
			nocache : true
		}),

		sortInfo : {
			field : ‘lastpost‘,
			direction : ‘desc‘
		}
	});

	return store;
}

function getCols() {
	var cols = [ {
		id : ‘topic‘,
		header : "Topic",
		dataIndex : ‘title‘,
		width : 420,
		renderer : renderTopic,
		sortable : true
	}, {
		header : "Author",
		dataIndex : ‘author‘,
		width : 100,
		hidden : true,
		sortable : true
	}, {
		header : "Replies",
		dataIndex : ‘replycount‘,
		width : 70,
		align : ‘right‘,
		sortable : true
	}, {
		id : ‘last‘,
		header : "Last Post",
		dataIndex : ‘lastpost‘,
		width : 150,
		renderer : renderLast,
		sortable : true
	} ];
	return cols;
}

function getPagingBar(store) {
	return new Ext.PagingToolbar({
		pageSize : 25,
		store : store,
		displayInfo : true,
		displayMsg : ‘Displaying topics {0} - {1} of {2}‘,
		emptyMsg : "No topics to display"
	});
}

1.创建grid

var grid = new Ext.grid.GridPanel({
		width : 700,
		height : 500,
		title : ‘ExtJS.com - Browse Forums‘,
		store : store,
		trackMouseOver : true,//这个属性设置是会有mouseover改变底色背景的效果
		disableSelection : false,//是否可以进行行选择,设为true,行选后会改变底色背景
		loadMask : true,//加载的时候有转圈的那个等待图片

		columns : cols,

		viewConfig : {
			forceFit : true
		},

		bbar : pagingbar//分页条
	});

设置下宽高,然后设置下title,store和columns都是比较常规的。

2.store的问题,这个是核心

var store = new Ext.data.JsonStore({
		root : ‘topics‘, //看下面拿到的数据的"topics":[{"title":"XTemplate w...
		totalProperty : ‘totalCount‘, //看下面拿到的数据的"totalCount":"6679"
		idProperty : ‘threadid‘,//"threadid":"133690"
		remoteSort : true,

		fields : [ 
		        {name : ‘title‘, type : ‘string‘}, //type为string字符串
		        ‘forumtitle‘, //string字符串简写形式
		        ‘forumid‘, 
		        ‘author‘, 
		        {name : ‘replycount‘, type : ‘int‘}, //type为整形int,还有float
			{
			    name : ‘lastpost‘,
			    mapping : ‘lastpost‘,
			    type : ‘date‘,
			    dateFormat : ‘timestamp‘
		        }, //type为日期date--注意这里接收的数据为System.currentTimeMillis()/1000
		        ‘lastposter‘, 
		        ‘excerpt‘ 
		        ],

		proxy : new Ext.data.ScriptTagProxy({
			url : ‘http://extjs.com/forum/topics-browse-remote.php‘,
			nocache : true//加上这一句以后请求后面就不会有_dc=********
		}),

		sortInfo : {
			field : ‘lastpost‘,
			direction : ‘desc‘
		}//这样写以后就会在http请求后加上"?sort=lastpost&dir=DESC"
	});

拿到的数据是这样的

{"totalCount":"6679","topics":[{"title":"XTemplate with in EditorGridPanel","threadid":"133690","username":"[email protected]","userid":"272497","dateline":"1305604761","postid":"602876","forumtitle":"Ext 3.x: Help","forumid":"40","replycount":"2","lastpost":"1305857807","lastposter":"[email protected]","excerpt":"Hi , \n \nI have an EditiorGridPanel whose one column i am using XTemplate to render and another Column is Combo Box Field .\nWhen i render the EditorGri..."},{"title":"IFrame error  &quot;_flyweights is undefined&quot;","threadid":"133571","username":"Daz","userid":"52119","dateline":"1305533577","postid":"602456","forumtitle":"Ext 3.x: Help","forumid":"40","replycount":"1","lastpost":"1305857313","lastposter":"Daz","excerpt":"For Ext 3.3.0 using Firefox 4 & Firebug, the following error is often happening when our app loads:\n    \"e._flyweights is undefined\".\n   \n  Yet, this ..."}]}

3.分页条pagingbar,这个也是关键点

function getPagingBar(store) {
	return new Ext.PagingToolbar({
		pageSize : 25,//每页25条
		store : store,
		displayMsg : ‘Displaying topics {0} - {1} of {2}‘,//{0}是start{1}是end{2}是total,信息是自动填充的
		displayInfo : true,//是否展示displayMsg信息
		emptyMsg : "No topics to display"//如果没有数据提示信息
	});
}

注意,的{2}体现了JsonStore的totalProperty : ‘totalCount‘,的意义所在,发出去的最终请求例如,https://www.sencha.com/forum/topics-browse-remote.php?start=0&limit=25&sort=lastpost&dir=DESC&_dc=1437646466940&callback=stcCallback1001

4.column列模型

function getCols() {
	var cols = [ {
		id : ‘topic‘,
		header : "Topic",
		dataIndex : ‘title‘,
		width : 420,
		renderer : renderTopic,
		sortable : true
	}, {
		header : "Author",
		dataIndex : ‘author‘,
		width : 100,
		hidden : true,
		sortable : true
	}, {
		header : "Replies",
		dataIndex : ‘replycount‘,
		width : 70,
		align : ‘right‘,
		sortable : true
	}, {
		id : ‘last‘,
		header : "Last Post",
		dataIndex : ‘lastpost‘,
		width : 150,
		renderer : renderLast,
		sortable : true
	} ];
	return cols;
}

第一个关键点是dataIndex和store的字段对应,第二个关键点是renderer,

function renderLast(value, p, r) {
	return String.format(‘{0}<br/>by {1}‘, value.dateFormat(‘M j, Y, g:i a‘),
			r.data[‘lastposter‘]);//格式还可以是Ext.util.Format.date(d, ‘Y-m-d H:i:s‘);
}

这里的r指的是一条记录,例如

{"title":"XTemplate with in EditorGridPanel","threadid":"133690","username":"[email protected]","userid":"272497","dateline":"1305604761","postid":"602876","forumtitle":"Ext 3.x: Help","forumid":"40","replycount":"2","lastpost":"1305857807","lastposter":"[email protected]","excerpt":"Hi , \n \nI have an EditiorGridPanel whose one column i am using XTemplate to render and another Column is Combo Box Field .\nWhen i render the EditorGri..."}

所以r.data[‘lastposter‘]就是1305857807,这里的value就是调用renderLast的那个dataIndex->lastposter,注意这里的1305857807需要乘以1000才是秒,就是new Date(1305857807000),而这里应该是系统帮你转换了,如果以后有这里时间转换报错可以来看此博客。

时间: 2025-01-06 11:54:52

详解Ext分页Grid的相关文章

mysql中limit的用法详解[数据分页常用]

在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table  LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.LIMIT 接受一个或两个数字参数.参数必须是一个整数常量.如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目.初始记录行的偏移量是

Nop--NopCommerce源码架构详解专题目录

最近在研究外国优秀的ASP.NET mvc电子商务网站系统NopCommerce源码架构.这个系统无论是代码组织结构.思想及分层都值得我们学习.对于没有一定开发经验的人要完全搞懂这个源码还是有一定的难度的,所以也打算写一个跟蓝狐学习Nop--NopCommerce源码架构详解系列文章. 以下文章主要针对NopCommerce版本:Nop3.4 NopCommerce源码架构详解--初识高性能的开源商城系统cms NopCommerce源码架构详解--Autofac依赖注入分析 NopCommer

Ext.form.ComboBox常用属性详解

Ext.form.ComboBox常用属性详解 标签: Extjs js combo js 代码 var combo = new Ext.form.ComboBox({ store : new Ext.data.SimpleStore({ fields : ['value', 'text'], data : [['1001', '小儿迪巧'], ['1002', '成人迪巧'], ['1003', '秀源']] }), hiddenName:'product_code',//提交到后台的inpu

Ext.TabPanel中的items详解

Ext.TabPanel中的items: (来自项目源码中的items条目代码) items:{ id:"opt1", title:"默认页面", tabTip:"这是默认页面,不可以关闭", html:"这是默认页面哦!" },,,, items里面的这一组配置究竟是创建什么组件的配置项,在哪里有说明呢?英文原版api给出了说明. If an xtype is not explicitly specified, the de

Servlet+JavaBean+JSP真假分页技术详解

说明:分页技术分为真分页和假分页,具体采用哪种技术需要根据需求自我抉择.其实两者之间实现区别并不是太大.在分页之前我们需要搞明白对谁进行分页,一般情况是将数据封装到一个list集合中,明白这这一点问题基本上就已经解决了.(编写匆促如有错误请联系我) 下面首先介绍真分页. 方法一: 为了大家学习起来方便, 我将在项目中用到的内容都放在这个文档中,所以可能会比较萝莉啰嗦. 1.构建数表,字段如下 goods goodid int goodname varchar(45) price flaot 2,

Ext.Net学习笔记22:Ext.Net Tree 用法详解

Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"> <Root> <ext:Node Text="根节点" Expanded="true"> <Children> <ext:Node Text="节点1" Expand

LigerUI之Grid使用详解(三)——字典数据展示

一.问题概述 在开发web信息管理系统时,使用Web前端框架可以帮助我们快速搭建一组风格统一的界面效果,而且能够解决大多数浏览器兼容问题,提升开发效率.在关于LigerGrid的前两篇的内容里,给大家介绍了表格的基本的展示数据用法.(传送门:LigerUI之Grid使用详解(一)--显示数据 .LigerUi之Grid使用详解(二)--数据编辑 ) 在实际应用开发中,我们会经常遇到这样的场景,在展示业务数据的时候需要把业务数据中的参数项或者字典项的编码转换成参数名称或者字典名称展示出来.在这里本

AngularJS自定义指令详解(有分页插件代码)

前言 除了 AngularJS 内置的指令外,我们还可以创建自定义指令. 通过 .directive() 函数来添加自定义的指令. 调用自定义指令时,需要在HTMl 元素上添加自定义指令名. 自定义指令命名规则:使用驼峰命名法来命名,即除第一个单词外的首字母需大写.如: myDirective. 在html页面调用该指令时需要以 - 分割,如: my-directive.示例代码: <body ng-app="myApp"> <my-directive><

Ext.Net学习笔记07:Ext.Net DirectMethods用法详解

前面两篇内容中,我们看到了DirectEvents方便调用服务器端方法.DirectEvents调用WebService方法的使用方法,今天我们来看看DirectMethods,这家伙可比DirectEvents更加灵活了,它可以像调用JS方法一样来异步调用服务器端的方法. 使用DirectMethods在JS中调用C#方法 我承认,这个标题有点噱头,其实应该是通过DirectMethods,在JS中通过异步调用的方式执行服务器端的方法. 来看一个例子吧: [DirectMethod] publ