flex 分页功能参考

来源:互联网 发布:台湾欧酷电视棒淘宝 编辑:程序博客网 时间:2024/05/22 13:59

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);

        }
       
    }
}