App分页探讨

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了App分页探讨相关的知识,希望对你有一定的参考价值。

参考技术A 作为一名App开发者,数据分页是很常见的需求,但在实现过程中多多少少都会存在一些问题,遇到次数多了,我就想,别人是怎么做的?有没有完美的分页方式?在研究了一些资料后,对分页有了更全面的认识。基于不同的场景,做法各不相同,各有优点和缺点,不存在完美的分页。

先从交互设计的角度来看,在实现时首先要确定采取哪种方式,主要是Web分页和流式分页的区别:

在实际生产中往往采用折中的方式,比如自动加载几次后让用户手动点击“更多”继续加载,或者在信息流中间增加用于定位的页码;

再从开发的角度来看,可以分为前端分页与后端分页,这个确定主要工作由哪边来做。

前端分页不多谈,因为实现比较直接,一次性拉取所有数据,然后前端控制数据的展现量。这里着重探讨后端分页。上文已经探讨了交互分类的区别,第一种传统的Web式分页,是Web开发中常用的分页方式,实现上是Web分页接口,通过页码进行分页,一般来说,就是根据pageIndex和pageSize来进行分页。第二种流式分页,相对于Web来说,是因为App的交互方式,下拉刷新,向上滚动加载,一般并没有Web上显式的页码,在Web上清晰的页码,在App上往往是不可见的。这种方式为流式分页。流式是UI交互的分类,实现起来可以多种多样,可以采用Web式分页接口来实现。

如果流式分页上采用Web分页接口会有什么问题呢?

那么,如何解决Web分页的这些问题?

以上为研究网络上一些资料后的总结,那么,看起来可行的解决方法就是游标式分页,当分页数据需要增删改时该如何处理?

到目前为止,看起来都不错,暂不考虑多个客户端同一个账号做不同修改的同步。让我们更深一步,增删改会对原有其它数据产生影响时该如何处理?当然,全部重新拉取不少不可用,只是十分粗暴。

再更进一步,增删改会对原有数据的排序产生影响,这种情况出现在数据为多层时,例如数据按某个属性分组,增删改某个数据会对整个分组的排序产生影响,这时该如何处理?貌似到这里开发会有强烈的冲动全部重新拉取,不过如果多做一点,也可以避免。

项目一众筹网04_1_角色维护-分页_角色列表的页面搭建__同步异步的探讨实际应用_完美获取前端元素_异步中数据追加的问题_关键词模糊查询功能完成引入外部js文件

系列文章目录

07-角色维护-分页-过渡-点超链接跳转到页面

点超链接跳转到角色列表页面的时候不需要带参数,我们就直接在 view-controller 里面维护就好了

角色列表的页面搭建

=角色(分页)列表的页面还是去看模型,但是直接查看源代码来改造代码是不方便的

我们直接这样 选择检查


跟以前一样,这样去复制
页面有大量的假数据,留1条做模板。其余的都删掉
页面跳转的链接待会改一下

然后设置好view-controller

08-角色维护-分页-前端-准备工作


设置全局变量有什么好处,好处就是以后我们要修改的话,就只要修改这个地方就行了

创建外部的JavaScript文件

引入外部js文件:注意引入的路径


然后在js里面写一些方法


可参考Admin里面是怎么写的,不过Admin是同步,这里是异步,晚上一样不可能,但是基本上还是一样的,道理是相同的


这样就完成了所有的js大概骨架,我们实现这个功能就把它拆分成一个一个的小模块来逐个处理


同步异步的探讨实际应用


怎么改? 把pageInfo的声明放到里面来,并且把填充的方法也放他后面如下:


方式二:改成同步你不管怎么样都要先等我先执行完(例子可以看前面我的同步异步的探讨)

方式三:玩出花

09-角色维护-分页-前端-函数getPageInfoRemote()




故意写错,造成后端错误,看看前端会打印什么


根据最官方靠谱的做法其实是根据状态码(status)来进行判断

完美获取前端元素


尽量复制,手输入容易出错

最终如下


然后就可以接着往下写了

注意:js里面没有equals 直接用用双等于即可

为了避免写错,尽量复制
下面这个类是我们为统一返回JSON格式数据所做的工具类,我们来这里面复制,这个工具类在别的项目中也可以使用


两方面我们都排除了
再往下就一定是成功了

10-角色维护-分页-前端-函数fillTableBody()




扯回来
数据我们要在tbody标签里面去显示








同理,另外3个按钮也是这样做



异步中数据追加的问题

注意,异步跟我们之前的同步有一个最大的区别就是,异步是无刷新的,
我们之前的管理员维护是同步的,仔细看,页面是会刷新的

这样就会有一个问题,我们点击页码导航条的时候,比如点一下下一页
,因为没有刷新,旧数据一直在,所以就会导致,数据一直追加


所以我们在前面还得做一个操作
注意清空旧数据的位置,是方法的最前面,每次调用才去清空,不要写在for循环里面,不然就永远只有最后一条数据了


重启服务,看下效果,有问题及时处理

下面是分页页码导航条

11-角色维护-分页-前端-函数generateNavigator( )和paginationCallBack( )

在前一个方法里面一定得先去调用一下


这里也可以参考我们之前的Admin,管理员/用户维护的分页页码是怎么写的





从前端也可以看出来


这里可以复制admin-page.jsp 页面的代码来,注意区分他们的不同之处,
也是同步的写法和异步的写法的区别


注意,跟同步的区别,异步不需要跳转页面



检查一下是否漏掉了css和js

效果如下:

12-角色维护-关键词搜索






13-角色维护-新增-目标和思路(引入模态框)(下一篇)

14-角色维护-新增-代码:前端
15-角色维护-新增-代码:后端
16-角色维护-新增-小结
17-角色维护-更新-目标和思路
18-角色维护-更新-代码:前端-给铅笔按钮绑定单击响应函数
19-角色维护-更新-代码:前端-打开模态框
20-角色维护-更新-代码:前端-执行更新
21-角色维护-更新-代码:后端-执行更新
22-角色维护-删除-目标和思路
23-角色维护-删除-代码:后端
24-角色维护-删除-代码:前端-打开模态框
25-角色维护-删除-代码:前端-执行删除
26-角色维护-删除-代码:前端-单条删除
27-角色维护-删除-代码:前端-批量删除-全选全不选功能
28-角色维护-删除-代码:前端-批量删除-收集要删除的信息
29-角色维护-删除-小结

以上是关于App分页探讨的主要内容,如果未能解决你的问题,请参考以下文章

uni-app 中如何实现上滑分页和下拉刷新

Django分页

ElasticSearch深度分页详解

plone.app.contenttypes 启用后集合分页失败

Grails App中的双重分页问题

基于Mysql数据库的SSM分页查询