本来想找个针对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组件,使用简单,在使用的时候,只需要在页面载入里,新建组件对象就OK,另外还有一个方法监听控件返回的的页数,可以实现分面。flex会生成linkButton,并且可以按需要控件显示的数量。如有不...
例如,在“pageTest”这个项目中,可能包含了一个名为“pageTest”的文件,这个文件可能是实现Flex分页的一个示例或者源代码。开发者可以通过研究这个文件,学习如何在自己的项目中实现类似的分页功能。 总的来说,...
总的来说,Flex分页是一个涉及数据管理、用户交互和界面设计的综合问题。通过合理的分页实现,我们可以提高应用的性能,提升用户的浏览体验。而文件列表中的资源正揭示了这样一个分页组件的实现细节,包括事件处理、...
博文链接提到的是iteye上的一个博客,虽然具体内容未给出,但通常博主会分享实现Flex分页的具体代码示例、注意事项和优化技巧。访问这个链接可以获取更多关于Flex分页的实际操作指导。 6. **压缩包中的文件**: ...
7. **兼容性和扩展性**:一个优质的Flex分页组件应具备良好的兼容性,适应各种Flex版本和环境,并且设计应考虑到未来的扩展,如添加新的功能或与其他组件集成。 在“FlexPaging”这个文件中,可能包含了实现以上...
在Flex开发中,数据展示通常会涉及到大量的数据处理,如分页、排序、过滤和关键字搜索等。在Flex中,我们可以使用DataGrid组件来实现这些功能,提高用户体验并优化性能。 1. **Flex DataGrid 分页技术**: Flex ...
通过以上这些步骤,我们可以创建一个功能完备且用户友好的Flex分页显示应用。这个实例不仅涵盖了Flex的基本用法,还涉及到数据管理、用户交互和性能优化等多方面的知识,对于提升Flex开发技能具有很大的实践价值。
综上所述,创建一个自定义的Flex分页控件涉及到组件设计、事件处理、数据绑定、皮肤化等多个方面。通过深入理解和实践这些知识点,开发者可以构建出功能强大、易于使用的分页工具,提升应用的用户体验。提供的文件...
在Flex开发中,分页控件是用于展示大量数据时必不可少的一个组件,它允许用户以较小的数据块(每页)浏览整个数据集,从而提高用户体验并减轻服务器负载。本篇文章将详细讲解如何在Flex中创建和使用分页控件。 首先...
Flex DataGrid支持自定义数据提供者,你可以创建一个类来实现IList接口,这个类应该包含分页逻辑,如当前页、总页数、每页记录数等属性。当用户点击分页按钮时,你的数据提供者会更新这些属性,并根据新的分页设置...
- `DataGrid`是Flex框架中的一个标准组件,用于展示和编辑数据项。 - 它支持各种类型的布局和数据绑定方式,能够灵活地适应不同的应用场景。 2. **分页的重要性**: - 当数据量较大时,直接加载所有数据会导致...
标题"Flex分页控件组件"暗示了这个压缩包可能包含一个预封装好的分页组件,可能是一个自定义的Flex组件或者一个第三方库,比如mx.controls.Paginator类。这个组件通常会提供基本的分页功能,如页码显示、跳转至指定...
Flex Data Grid是Adobe Flex框架中的一个组件,全称为MX:DataGrid或Spark:DataGrid。它用于展示和操作表格形式的数据,支持多种功能,如列排序、选择行、自定义渲染等。在Flex 4之后,分为MX和Spark两个版本,MX ...
在Flex开发中,分页显示记录是一个常见的需求,特别是在处理大量数据时,为了提高用户体验和加载速度,我们通常不会一次性加载所有数据,而是选择分页加载。本项目以FLEX4为开发环境,通过创建一个工具类来实现分页...
Flex分页控件是基于Adobe Flex技术开发的一种用户界面组件,用于在大量数据展示时提供高效、便捷的浏览体验。Flex是一种开源的富互联网应用程序(RIA)框架,它使用ActionScript编程语言和MXML标记语言,允许开发者...
标题中的“自己写的分页 flex datagrid 及一些其他东西 flexbuilder 项目源文件”表明这是一个使用Adobe Flex Builder开发的项目,重点在于自定义的分页功能和数据网格(datagrid)组件。Flex是Adobe推出的一种用于...
Flex + BlazeDS + Java 后台分页的实现是一个关键的技术环节,特别是在开发大型Web应用程序时,为了提高用户体验和系统性能,数据通常需要通过分页的方式进行加载。本方案主要探讨了如何在Flex前端和BlazeDS中间件与...
本资源"Flex分页代码by whaosoft"提供了一个使用Flex实现分页功能的示例代码,适用于创建可扩展且响应式的网页应用。 Flex是一种布局模式,通常指Adobe Flex,它基于ActionScript和MXML,用于构建富互联网应用程序...
分页是将大量数据分割成多个部分,每次只显示一部分,用户可以通过点击页码或导航按钮在这些部分之间切换。这样可以避免一次性加载所有数据导致的性能问题,同时提高用户体验,使用户能够更轻松地浏览和查找所需信息...
FLEX 分页控件 可以跳转 上一页 下一页 首页 尾页