flex 分页功能参考

    技术2022-05-19  20

    0. 为外层容器的creationComplete指定获取数据的方法

     

             creationComplete="getInfo (1)"//1是当前页

     

    1. 获取数据的方法

    <fx:Script>         <![CDATA[

     

                import com.adobe.cairngorm.CairngormUtil;             import fx.model.ModelConfig;             import mx.collections.ArrayCollection;             import mx.controls.Alert;                         private var selectedPaperids:ArrayCollection = new ArrayCollection();             //ModelConfig存储全局配置信息,getOne()以单例的方式返回一个对象注意ModelConfig要声明[Bindable]

     

                [Bindable]             public var model:ModelConfig=ModelConfig.getOne();

     

               /**              * 页面初始化函数              * 设置查询条件值              * 设置pagingbar              **/             public function getInfo (page:int):void{                 //参数处理:包括查询约束条件、分页信息                 var params:Object={paperName:paperName.text                     ,source:source.text                     ,currentPage:page                     ,pageSize:10                     ,pageNumShow:10                     ,eventName:"TestCD"                     ,pagingbar:pagingBar                 };                 //调用事件处理类                 CairngormUtil.event("TestCD",params);             }

         ]]>     </fx:Script>

     

    2. 数据显示界面调用分页组件

    <paging:PagingBar id="pagingBar"></paging:PagingBar>

     

     

    3.TestCD.as

    -------------------------------------------------------------------

    package fx.commands {     import com.adobe.cairngorm.BaseCommand;     import com.adobe.cairngorm.CairngormUtil;     import com.adobe.cairngorm.control.CairngormEvent;     import com.adobe.serialization.json.JSON;         import flash.events.MouseEvent;         import fx.model.ModelConfig;     import fx.util.PagingBar;         import mx.collections.ArrayCollection;     import mx.controls.Alert;     import mx.controls.Button;     import mx.formatters.DateFormatter;         public class TestCD extends BaseCommand     {         public var model:ModelConfig=ModelConfig.getOne();         public var pbar:PagingBar=new PagingBar();                 public function TestCD()         {             //TODO: implement function             super();         }                 /**          * 获取查询约束条件查询已做试卷          **/         override public function execute(event:CairngormEvent):void{             //查询界面传来的参数             var data:Object=event.data;

                //设置pbar 对应getInfo(1) 中的pagingbar:pagingBar             pbar = data.pagingbar;

                this.showBusy();                         var url:String = model.urlRemoteWebServer+"/testAction.action";             //存储查询条件             model.testPageBar.params={paperName:data.paperName,source:data.source,currentPage:data.currentPage,pageSize:data.pageSize,pageNumShow:data.pageNumShow,eventName:data.eventName,pagingbar:data.pagingbar};             var params:Object={userid:model.uservo.getUserid(),papername:data.paperName,source:data.source,currentPage:data.currentPage,pageSize:data.pageSize};             //发送请求到远程服务器端获取信息             CairngormUtil.send(url                 ,this                 ,params);         }                 override public function result(data:Object):void{             var json_str:String = data.result as String;             //trace(json_str);

                //服务器端的返回结果是json的形式             var result_str:Object= JSON.decode(json_str);

                //返回的json串自己设定了一个标识,标识服务器端操作是否成功。根据自己定义的情况定             if(result_str.status=="200"){                 //设置界面上要展示的已做试卷数据                 getData(result_str.context[0].infos);                 pbar.pageBar=model.testPageBar;//设置对应分页信息来自testPageBar                 //获取到返回数据后,设置分页基本信息                 model.testPageBar.initPageBar(result_str.context[0].totalSize,model.testPageBar.pageSize,result_str.context[0].currentPage,model.testPageBar.params.pageNumShow,model.testPageBar.params.eventName);                 //view.delayView.addElement( new DelayView() );                             }else{                             }             this.closeBusy();         }         /**          * 填充数据到ArrayCollection          **/         public function getData(data:Object):void{             //清空数据             model.testPageBar.clearOrgData();

                for(var i:int=0;i<data.length;i++){                 var testData:Object={id:data[i].id,paperId:data[i].paperId,paperName:data[i].paperName,source:data[i].source,userScore:data[i].userScore,finalTime:data[i].finalTimeStr};          //设定数据到orgData中      

    model.testPageBar.setOrgData(testData);             }         }                 override public function fault(info:Object):void{             Alert.show(info.toString());         }     } }

    ----------------------------------------------------------------------------------

     

     

    分页PagingBar.mxml

    -----------------------------------------------------------------------------------

    <mx:HBox xmlns:fx="http://ns.adobe.com/mxml/2009"          xmlns:mx="library://ns.adobe.com/flex/mx"          paddingLeft="10"          backgroundColor="white">     <fx:Style>                 LinkBar {             borderStyle: none;             backgroundAlpha: 0.06;             separatorColor: #c4cccc;             rollOverColor: #009999;             selectionColor: #7fcdfe;             textSelectedColor: #6600cc;             disabledColor: #33ffff;             dropShadowEnabled: false;         }     </fx:Style>     <fx:Script>         <![CDATA[             import com.adobe.cairngorm.CairngormUtil;                         import flash.events.KeyboardEvent;                         import fx.model.ModelConfig;                         import mx.collections.ArrayCollection;             import mx.controls.AdvancedDataGrid;             import mx.controls.DataGrid;             import mx.events.ItemClickEvent;             import mx.utils.ObjectProxy;             import mx.validators.NumberValidator;                         [Bindable]             public var model:ModelConfig=ModelConfig.getOne();//在声明ModelConfig是用到[Bindable],在界面使用时也需要用[Bindable]

                [Bindable]             public var pageBar:PageBar=null;//这才是最关键的,分页的相关信息都从此对象来 获取                         public var advancedDataGrid:AdvancedDataGrid=null;                     //页面初始化函数             public function getDatas(page:int):void{                 //重新设定当前页                 pageBar.params.currentPage=page;                 //参数处理                 var params:Object=pageBar.params;                                 //调用事件处理类                 CairngormUtil.event(pageBar.eventName,params);                             }             /**              * 页码按钮按下,first,pre,next,last              */             private function navigateButtonClick(pageString:int):void{                 //1.重新设置首页、上一页、下一页、尾页                 //3.重新设置每页显示的页码条                 //2.重新填充页面数据                 //pageBar.createNavBar(pageString);                                 getDatas(pageString);             }             /**              * 页码按钮按下(页码条点击)              */             private function navigatePage(event:ItemClickEvent):void             {                 //重发数据请求                 getDatas(event.item.data);             }         ]]>     </fx:Script>     <mx:Label text="第" width="100%"/>     <mx:Label id="curPageLabel" text="{pageBar.currentPage}" width="100%"/>     <mx:Label text="页/共" width="100%"/>     <mx:Label id="totalPageLabel" text="{pageBar.totalPageSize}" width="100%"/>     <mx:Label text="页 共" width="100%"/>     <mx:Label id="countRecordSizeLabel" text="{pageBar.totalRecordSize}" width="100%"/>     <mx:Label text="条记录" width="100%"/>     <mx:Button id="firstNavBtn" label="首页" click="navigateButtonClick(pageBar.firstPage)"/>     <mx:Button id="preNavBtn" label="上一页" click="navigateButtonClick(pageBar.prePage)"/>     <mx:LinkBar id="pageNav" itemClick="navigatePage(event)" dataProvider="{pageBar.pageNumData}"/>         <mx:Button id="nextNavBtn" label="下一页" click="navigateButtonClick(pageBar.nextPage)"/>     <mx:Button id="lastNavBtn" label="尾页" click="navigateButtonClick(pageBar.lastPage)"/>     </mx:HBox>

     

    -----------------------------------------------------------------------------------

     

    分页数据存储类PageBar.as

    ------------------------------------------------------------------------------------

    package fx.util {     import com.adobe.cairngorm.CairngormUtil;         import mx.collections.ArrayCollection;     import mx.controls.Button;     import mx.controls.Label;     import mx.controls.LinkBar;     import mx.events.ItemClickEvent;         //必须声明成Bindable才能在其他mxml中Bindable     [Bindable]     public class PageBar     {         /**          * 查询数据的事件名称          **/         public var eventName:String="";         /**          * 总记录数          **/         public var totalRecordSize:int=0;         /**          * 每页显示行数          **/         public var pageSize:int=10;                /**          * 当前页数          **/         public var currentPage:int=1;                /**          * 总页数          **/         public var totalPageSize:int=1;            /**          * 首页          **/         public var firstPage:int=1;         /**          * 上一页          **/         public var prePage:int=1;         /**          * 下一页          **/         public var nextPage:int=1;         /**          * 尾页          **/         public var lastPage:int=1;         /**          * 所有的数据          **/         public var orgData:ArrayCollection=new ArrayCollection();         /**          * 每页显示页码数          **/         public var pageNumShow:int=10;         /**          * 每页显示页码          **/         public var pageNumData:ArrayCollection=new ArrayCollection();         /**          * 存储查询参数          * */         public var params:Object={};         /**          * 当前页          **/         public var curPageLabel:Label=new Label();         /**          * 共多少页          **/         public var totalPageLabel:Label=new Label();         /**          * 共多少条记录          **/         public var countRecordSizeLabel:Label=new Label();         /**          * 首页          **/         public var firstNavBtn:Button=new Button();         /**          * 上一页          **/         public var preNavBtn:Button=new Button();         /**          * 分页块          **/         public var pageNav:LinkBar=new LinkBar();         /**          * 下一页          **/         public var nextNavBtn:Button=new Button();         /**          * 尾页          **/         public var lastNavBtn:Button=new Button();                 public function PageBar()         {         }                 /**          * 计算总页数          **/         public function countTotalPageSize():void{             //1.总记录数小于每页显示记录数时             if(this.totalRecordSize<=this.pageSize && this.totalRecordSize>=0){                 this.totalPageSize=1             }             //2.总记录数大于每页显示记录数时               if(this.totalRecordSize>this.pageSize && this.pageSize>=0){                 //trace("this.totalRecordSize/this.pageSize="+this.totalRecordSize/this.pageSize);                 //2.1 总记录数正好是每页显示记录数的倍数时,总页数=总记录数/每页显示记录数                 this.totalPageSize=this.totalRecordSize/this.pageSize;                 //trace("this.totalRecordSize%this.pageSize="+this.totalRecordSize%this.pageSize);                 //2.2 总记录数不是每页显示记录数的倍数时,总页数=总记录数/每页显示记录数+1                 if(this.totalRecordSize%this.pageSize>0){                     this.totalPageSize+=1;                 }             }         }         /**          * 设置首页和尾页          **/         public function setFirstPageAndLastPage():void{             //1.总体分页数第一页和最后一页             this.firstPage=1;             this.lastPage=this.totalPageSize;             //2.还有一中设置是根据this.pageNumData来设置             var size:int=this.pageNumData.length;             //this.firstPage=this.pageNumData.getItemAt(0).label             //this.lastPage=this.pageNumData.getItemAt(size-1).label         }         /**          * 初始化分页,设置总记录数、每页显示记录数、当前页、计算总页数、设置首页、设置尾页          * @param totalRecordSize 总记录数          * @param pageSize 每页显示记录数          * @param currentPage 当前页页码          *          **/         public function initPageBar(totalRecordSize:int,pageSize:int,currentPage:int,pageNumShow:int,eventName:String):void{             this.pageSize=pageSize;             this.totalRecordSize=totalRecordSize;             this.pageNumShow=pageNumShow;             this.eventName=eventName;             countTotalPageSize();             this.currentPage=currentPage;             createNavBar(this.currentPage);             setNavInfo();                     }         /**          * 创建各分页          **/         public function createNavBar(currentPage:int):void{             //得知总页数、当前页数、每页显示页码数后就可以设置上一页和下一页             //上一页             this.prePage=this.currentPage-1>0?this.currentPage-1:1;             //下一页             this.nextPage=this.currentPage+1<=this.totalPageSize?this.currentPage+1:this.totalPageSize;             this.pageNumData.removeAll();             if(this.totalPageSize<=this.pageNumShow){//1.总页数小于设定的页码数pageNumShow时,显示所有页码                 for(var i:int=0;i<this.totalPageSize;i++){                     //确保小于总页数,否则退出循环                     this.pageNumData.addItem({label: 1+i ,data: 1+i});                 }             }else{                 if(this.totalPageSize-this.currentPage+1<=this.pageNumShow){//2.剩余页码数(this.totalPageSize-this.currentPage+1)小于设定页码数pageNumShow,补全页码                     for(var i:int=this.totalPageSize-this.pageNumShow+1;i<=this.totalPageSize;i++){                         //确保小于总页数,否则退出循环                         this.pageNumData.addItem({label: i ,data: i});                     }                 }else{                     for(var i:int=0;i<this.pageNumShow;i++){//3.当前页码+设定页码数小于totalPageSize时,正常滚动                         //确保小于总页数,否则退出循环                         if(this.currentPage+i<=this.totalPageSize){                             this.pageNumData.addItem({label: this.currentPage+i ,data: this.currentPage+i});                         }                     }                 }             }             setFirstPageAndLastPage();         }         /**          *    设置分页条上的分页统计信息          **/         public function setNavInfo():void{             //设置界面上的分页统计数据             this.curPageLabel.text=this.currentPage.toString();             this.totalPageLabel.text=this.totalPageSize.toString();             this.countRecordSizeLabel.text=this.totalRecordSize.toString();             this.pageNav.dataProvider=this.pageNumData;         }         /**          * 清空orgData中的数据,此数据用于在界面展示          **/         public function clearOrgData():void{             this.orgData.removeAll();         }         /**          *    绑定数据到orgData中          **/         public function setOrgData(data:Object):void{             this.orgData.addItem(data);         }         /**          * 清空分页条          **/         public function clearPageNumData():void{             this.pageNumData.removeAll();         }         /**          *    设定分页条          **/         public function setPageNumData(data:Object):void{             this.pageNumData.addItem(data);         }     } }

     

    --------------------------------------------------------------------

    ModelConfig.as

    ------------------------------------------------------------

    package fx.model {     import com.adobe.cairngorm.model.IModelLocator;         import fx.util.PageBar;     import fx.util.Pages;         import mx.collections.ArrayCollection;         import spark.components.TitleWindow;     import spark.components.WindowedApplication;             [Bindable]     /**      *配置所有需要的model类      * @author Administrator      *      */     public class ModelConfig implements IModelLocator     {                //远端服务器地址         public var urlRemoteWebServer:String="http://www.test.com";         //存储我已做试卷分页信息         public var testPageBar:PageBar=new PageBar();

            public var uservo:UserVO=null;//存放用户登录的信息         //公用         public var rootWin:WindowedApplication;         public var loginViewWin:TitleWindow;         public var mainViewWin:TitleWindow;         public var doEvaluateVO:DoEvaluateVO;                   /                    private static var one:ModelConfig=null;          public static function getOne():ModelConfig           {                if (one == null)one = new ModelConfig();                return one;           }           public function ModelConfig()           {                         }               } }

    ----------------------------------------------------------

    注册事件CommandConfig.as

     

    package fx.commands {     import com.adobe.cairngorm.control.FrontController;             /**      * 注册所有的控制器      * @author Administrator      *      */     public class CommandConfig extends FrontController     {                           public function CommandConfig(){            //事件处理类不注册是不能使用的

              add(TestCD );         }             } }

     


    最新回复(0)