`

自己写的一个flex分页的小部件

阅读更多

本来想找个针对flex分页的组件,但是现实当中一直没有找到一个适合自己的方案。没有最好,只有最合适,针对我做的东西,我写了一个小组件,在生产力方面有了显著的提高。希望对某些同学有所帮助。

注意:此分页组件是建立在以后台提供特定格式的XML为基础的。

分页组件由三部分组成 1 分页需要的工具类 2 组件界面及相关功能代码 3 后台XML

首先介绍两个工具类:

PagingTool.as,封装了分页时最常用到的参数

package org.wjh.pager
{
	import flash.net.URLVariables;
	
	public class PagingTool
	{
		//要读取的store
		private var store:DataStore = null;
		//每页显示多少个
		public var pageSize:int = 20;
		//从第几个开始,需要传参过去 计算方法:current*pageSize
		public var beginNum:int = 0;
		public var totalCount:int = 0;
		//当前页是第几页
		[Bindable]
		public var current:int = 0;
		//总共的页数 
		public var totalPage:int = 0;
		//需要传送的参数
		public var params:URLVariables = new URLVariables();
		//构造方法 需要构造的方法
		public function PagingTool(ds:DataStore) {
			this.store = ds;
			//后台取一定要注意 需要利用request.getParameter("begin")
			//或者request.getParameter("size")
			//从第begin条记录开始 取出size条记录
			params.begin = this.beginNum;
			params.size = this.pageSize;
		}
		
		
	}
}

 DataStore.as:封装读取xml时,需要传递的一些参数

package org.wjh.pager
{
	public class DataStore
	{
		//提供数据的URL
		public var url:String = "";
		//要读取的节点 XMLList
		public var node:String = "";
		//表明总条数的节点 这里暂时没有用到  判断总条数 固定为total
		public var totalNode:String = "";
	}
}

 接下来是,分页组件的界面和相关的事件响应代码块,本组件界面比较简单,包含下一页,上一页和一个combox跳转,各位可以根据实际需要做相应修改即可。

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
	<mx:Script>
		<![CDATA[
			import mx.rpc.events.FaultEvent;
			import mx.controls.List;
			import mx.rpc.events.ResultEvent;
			import flash.utils.getTimer;
			import mx.rpc.http.mxml.HTTPService;
			import mx.controls.DataGrid;
			import org.wjh.pager.PagingTool;
			import org.wjh.pager.DataStore;
			import mx.events.ResizeEvent;
			import mx.controls.Alert;
			[Bindable]
			public var store:DataStore = null;
			[Bindable]
			public var pagingTool:PagingTool = null;
			[Bindable]
			public var grid:DataGrid = null;
			[Bindable]
			private var combNum:int = 0;
			[Bindable]
			private var bindTotal:int = 0;
			//页面的初始化
			private function pageInit():void {
				//在走这一步以前,用户已经把pagingTool和Store设置好了
				var http:HTTPService = new HTTPService();
				http.url = store.url + "?time=" + new Date().getTime();
				http.showBusyCursor = true;
				http.method = "POST";
				http.resultFormat = "e4x";
				var params:URLVariables = pagingTool.params;
				params.begin = 0;
				params.size = pagingTool.pageSize;
				http.addEventListener(ResultEvent.RESULT,pageInitCallback);
				http.addEventListener(FaultEvent.FAULT,faultHand);
				http.send(params);
			}
			//如果用户需要重新设置参数  选择不一样的数据时 此方法起一定作用
			public function invoke():void {
				this.pageInit();
			}
			//页面的初始化
			private function pageInitCallback(e:ResultEvent):void {
				var xml:XML = XML(e.result);
				/**var xmlList:XMLList = xml.elements(store.node);*/
				var xmlList:XMLList = new XMLList(xml.elements(store.node));
				//Alert.show((xml.elements(store.node)) as String);
				//总数量节点必须要以total命名,暂时按照这个方式进行
				pagingTool.totalCount = int(xml.total);
				bindTotal = pagingTool.totalCount;
				pagingTool.totalPage = pagingTool.totalCount % pagingTool.pageSize == 0 ? pagingTool.totalCount / pagingTool.pageSize : pagingTool.totalCount / pagingTool.pageSize + 1;
				grid.dataProvider = xmlList;
				//当页面装载以后 分页工具的当前页变成了第一页
				pagingTool.current = 1;
				pagingTool.beginNum = pagingTool.pageSize * pagingTool.current;
				var array:Array = new Array();
				for(var count:int = 0; count < pagingTool.totalPage; count++) {
					array.push((count + 1) + "");
				}
				comb.dataProvider = array;
			}
			//下一页
			private function nextCallback(e:ResultEvent):void {
				var xml:XML = XML(e.result);
				/**var xmlList:XMLList = xml.elements(store.node);*/
				var xmlList:XMLList = new XMLList(xml.elements(store.node));
				grid.dataProvider = xmlList;
				pagingTool.current = pagingTool.current + 1;
				comb.selectedIndex = pagingTool.current - 1;
			}
			
			private function next():void {
				if(pagingTool.current == pagingTool.totalPage) {
					return;
				}
				var http:HTTPService = new HTTPService();
				http.url = store.url + "?time=" + new Date().getTime();
				http.showBusyCursor = true;
				http.resultFormat = "e4x";
				http.method = "post";
				http.addEventListener(ResultEvent.RESULT,nextCallback);
				http.addEventListener(FaultEvent.FAULT,faultHand);
				var params:URLVariables = pagingTool.params;
				params.begin = pagingTool.current * pagingTool.pageSize;
				params.size = pagingTool.pageSize;
				http.send(params);
			}
			//上一页
			private function privousCallback(e:ResultEvent):void {
				var xml:XML = XML(e.result);
				/**var xmlList:XMLList = xml.elements(store.node);*/
				var xmlList:XMLList = new XMLList(xml.elements(store.node));
				grid.dataProvider = xmlList;
				pagingTool.current = pagingTool.current - 1;
				comb.selectedIndex = pagingTool.current - 1;
			}
			
			private function privous():void {
				if(pagingTool.current == 1) {
					return;
				}
				var http:HTTPService = new HTTPService();
				http.url = store.url + "?time=" + new Date().getTime();
				http.showBusyCursor = true;
				http.resultFormat = "e4x";
				http.method = "post";
				http.addEventListener(ResultEvent.RESULT,privousCallback);
				http.addEventListener(FaultEvent.FAULT,faultHand);
				var params:URLVariables = pagingTool.params;
				//下一页的上一页  这里需要减去2
				params.begin = (pagingTool.current-2) * pagingTool.pageSize;
				params.size = pagingTool.pageSize;
				http.send(params);
			}
			//Combox的处理方式
			private function combChange(e:Event):void {
				var comNum:int = int((ComboBox(e.target).selectedIndex) + 1);
				combNum = comNum;
				if(combNum == pagingTool.current) {
					return;
				} else {
					var http:HTTPService = new HTTPService();
					http.url = store.url + "?time=" + new Date().getTime();
					http.showBusyCursor = true;
					http.resultFormat = "e4x";
					http.method = "post";
					http.addEventListener(ResultEvent.RESULT,combCallback);
					http.addEventListener(FaultEvent.FAULT,faultHand);
					var params:URLVariables = pagingTool.params;
					//下一页的上一页  这里需要减去2
					params.begin = (combNum - 1) * pagingTool.pageSize;
					params.size = pagingTool.pageSize;
					http.send(params);
				}
			}
			
			private function combCallback(e:ResultEvent):void {
				var xml:XML = XML(e.result);
				/**var xmlList:XMLList = xml.elements(store.node);*/
				var xmlList:XMLList = new XMLList(xml.elements(store.node));
				grid.dataProvider = xmlList;
				pagingTool.current = combNum;
			}
			
			private function faultHand(e:FaultEvent):void {
				trace(e.message + "      FaultEvent");
			}
		]]>
	</mx:Script>
	<mx:HBox>
		<mx:Button fontSize="12" label="上一页" click="privous()"/>
		<mx:Button fontSize="12" label="下一页" click="next()"/>
		<mx:ComboBox fontSize="12" id="comb" change="combChange(event)"/>
		<mx:Label text="总共{bindTotal}条记录" fontWeight="bold" fontSize="12"/>
	</mx:HBox>
</mx:Canvas>

 

 

具体用法介绍,在Demo中的某个Application运行时触发init方法

[Bindable]
private var ds:DataStore = new DataStore();
[Bindable]
private var pt:PagingTool = null;
private function init():void {
	System.useCodePage = true;
	ds.url = SharedObject.getLocal("config","/",false).data.server + "basic/Product";
	trace("ds.url-->>>" + ds.url);
	ds.node = "Product";
	/**构造PagingTool 必须*/ 
	pt = new PagingTool(ds);
	pt.params.oper = "list";
	//这里放进 查询参数
	pageCom.grid = dg;
	pageCom.store = ds;
	pageCom.pagingTool = pt;
	/**启动分页组件*/
	pageCom.invoke();
}

 

 STEP 1:指定DataStore的URL,也就是提供XML的URL

 STEP 2:指定DataStore要读取的XML节点

 STEP 3:指定PagingTool中显示数据的DataGrid(程序中的dg)

 STEP 4:指定PagingTool的相关参数

 STEP 5:启动分页组件

按照上面的方法,后台的产生的XML应该是这种格式

<任意名称>
  <Product>
      <读取的字段节点,根据实际需要>
      </读取的字段节点,根据实际需要>
       .......
  </Product>
  <!-- N个Product节点,每个Product节点对应DataGrid的一条记录 -->
  <!-- 务必使用total来表示记录总数量 -->
  <total>
    1800
  </total>
</任意名称>

   

核心程序介绍和大致的用法就是以上这些了,由于DEMO涉及到的代码比较繁杂,我就不提供附件下载了,各位在使用过程中如遇到什么疑问可以站内短信或留言联系

截个图:

Flex分页组件界面

分享到:
评论

相关推荐

    flex 分页控件,我自己写的flex分页控件

    这是我自己写的一个flex组件,使用简单,在使用的时候,只需要在页面载入里,新建组件对象就OK,另外还有一个方法监听控件返回的的页数,可以实现分面。flex会生成linkButton,并且可以按需要控件显示的数量。如有不...

    flex分页 很好很强大

    例如,在“pageTest”这个项目中,可能包含了一个名为“pageTest”的文件,这个文件可能是实现Flex分页的一个示例或者源代码。开发者可以通过研究这个文件,学习如何在自己的项目中实现类似的分页功能。 总的来说,...

    flex 分页

    总的来说,Flex分页是一个涉及数据管理、用户交互和界面设计的综合问题。通过合理的分页实现,我们可以提高应用的性能,提升用户的浏览体验。而文件列表中的资源正揭示了这样一个分页组件的实现细节,包括事件处理、...

    flex分页代码

    博文链接提到的是iteye上的一个博客,虽然具体内容未给出,但通常博主会分享实现Flex分页的具体代码示例、注意事项和优化技巧。访问这个链接可以获取更多关于Flex分页的实际操作指导。 6. **压缩包中的文件**: ...

    Flex 分页组件,flex自定义组件

    7. **兼容性和扩展性**:一个优质的Flex分页组件应具备良好的兼容性,适应各种Flex版本和环境,并且设计应考虑到未来的扩展,如添加新的功能或与其他组件集成。 在“FlexPaging”这个文件中,可能包含了实现以上...

    Flex分页技术

    在Flex开发中,数据展示通常会涉及到大量的数据处理,如分页、排序、过滤和关键字搜索等。在Flex中,我们可以使用DataGrid组件来实现这些功能,提高用户体验并优化性能。 1. **Flex DataGrid 分页技术**: Flex ...

    Flex分页显示实例

    通过以上这些步骤,我们可以创建一个功能完备且用户友好的Flex分页显示应用。这个实例不仅涵盖了Flex的基本用法,还涉及到数据管理、用户交互和性能优化等多方面的知识,对于提升Flex开发技能具有很大的实践价值。

    flex 分页控件

    综上所述,创建一个自定义的Flex分页控件涉及到组件设计、事件处理、数据绑定、皮肤化等多个方面。通过深入理解和实践这些知识点,开发者可以构建出功能强大、易于使用的分页工具,提升应用的用户体验。提供的文件...

    flex分页控件的使用

    在Flex开发中,分页控件是用于展示大量数据时必不可少的一个组件,它允许用户以较小的数据块(每页)浏览整个数据集,从而提高用户体验并减轻服务器负载。本篇文章将详细讲解如何在Flex中创建和使用分页控件。 首先...

    flex datagrid 前台 分页

    Flex DataGrid支持自定义数据提供者,你可以创建一个类来实现IList接口,这个类应该包含分页逻辑,如当前页、总页数、每页记录数等属性。当用户点击分页按钮时,你的数据提供者会更新这些属性,并根据新的分页设置...

    flex分页控制

    - `DataGrid`是Flex框架中的一个标准组件,用于展示和编辑数据项。 - 它支持各种类型的布局和数据绑定方式,能够灵活地适应不同的应用场景。 2. **分页的重要性**: - 当数据量较大时,直接加载所有数据会导致...

    Flex 分页控件组件

    标题"Flex分页控件组件"暗示了这个压缩包可能包含一个预封装好的分页组件,可能是一个自定义的Flex组件或者一个第三方库,比如mx.controls.Paginator类。这个组件通常会提供基本的分页功能,如页码显示、跳转至指定...

    FLEX DATA GRID 分页

    Flex Data Grid是Adobe Flex框架中的一个组件,全称为MX:DataGrid或Spark:DataGrid。它用于展示和操作表格形式的数据,支持多种功能,如列排序、选择行、自定义渲染等。在Flex 4之后,分为MX和Spark两个版本,MX ...

    FLEX分页显示记录

    在Flex开发中,分页显示记录是一个常见的需求,特别是在处理大量数据时,为了提高用户体验和加载速度,我们通常不会一次性加载所有数据,而是选择分页加载。本项目以FLEX4为开发环境,通过创建一个工具类来实现分页...

    Flex分页控件源码

    Flex分页控件是基于Adobe Flex技术开发的一种用户界面组件,用于在大量数据展示时提供高效、便捷的浏览体验。Flex是一种开源的富互联网应用程序(RIA)框架,它使用ActionScript编程语言和MXML标记语言,允许开发者...

    自己写的分页 flex datagrid 及一些其他东西 flexbuilder 项目源文件

    标题中的“自己写的分页 flex datagrid 及一些其他东西 flexbuilder 项目源文件”表明这是一个使用Adobe Flex Builder开发的项目,重点在于自定义的分页功能和数据网格(datagrid)组件。Flex是Adobe推出的一种用于...

    Flex +BlazeDS+java后台分页的实现

    Flex + BlazeDS + Java 后台分页的实现是一个关键的技术环节,特别是在开发大型Web应用程序时,为了提高用户体验和系统性能,数据通常需要通过分页的方式进行加载。本方案主要探讨了如何在Flex前端和BlazeDS中间件与...

    Flex分页代码by whaosoft

    本资源"Flex分页代码by whaosoft"提供了一个使用Flex实现分页功能的示例代码,适用于创建可扩展且响应式的网页应用。 Flex是一种布局模式,通常指Adobe Flex,它基于ActionScript和MXML,用于构建富互联网应用程序...

    flex 分页学习例子

    分页是将大量数据分割成多个部分,每次只显示一部分,用户可以通过点击页码或导航按钮在这些部分之间切换。这样可以避免一次性加载所有数据导致的性能问题,同时提高用户体验,使用户能够更轻松地浏览和查找所需信息...

    FLEX 分页控件 可以跳转 上一页 下一页

    FLEX 分页控件 可以跳转 上一页 下一页 首页 尾页

Global site tag (gtag.js) - Google Analytics