起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3721|回复: 11

[结贴] 关于下拉刷新的一个新的问题

[复制链接]

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
发表于 2016-5-12 20:03:54 | 显示全部楼层 |阅读模式
利用平台提供的ScrollView+List+BaasData,可以很好的实现下拉刷新,上滑加载的功能。
现在问题来了,如果把BaasData组件换成CData,数据是通过在自己定的一个service实现类查出来的。这里候实现上滑加载就不好使了。
经过仔细分析发现,可能是我自己写的service没有返回总行数,所以List就不知道如何分页了。因此在官方提供的标准的SqlQuery实现类里,加入了一个必填项,countSql。
那么我自己定的service想实现分页应该怎么做呢???
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667

56

主题

370

帖子

963

积分

高级会员

Rank: 4

积分
963
QQ
发表于 2016-5-13 08:36:19 | 显示全部楼层
把limit,offset两个参数用上就行了。
回复 支持 反对

使用道具 举报

56

主题

370

帖子

963

积分

高级会员

Rank: 4

积分
963
QQ
发表于 2016-5-13 08:48:40 | 显示全部楼层
在baas中,一开始把参数获得:
Object columns = params.get("columns");
Integer limit = params.getInteger("limit");
Integer offset = params.getInteger("offset");
执行的sql的时候传进去:
table = DataUtils.queryData(conn, querysql, sqlParams, columns, offset, limit);

w页面里,在data的CustomRefresh事件中,把这些参数传进去:
                var data = event.source;
                var params = {
                        "columns" : Baas.getDataColumns(data),
                        "limit" : event.limit,
                        "offset" : event.offset
                };
               
                var success = function(resultData) {
                        var append = event.options && event.options.append;
                        data.loadData(resultData, append);
                };

                Baas.sendRequest({
                        "url" : "XXXXX / XXXXXX",
                        "action" : XXXXXXXX ,
                        "async" : false,
                        "params" : params,
                        "success" : success
                });
ok!
回复 支持 反对

使用道具 举报

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
 楼主| 发表于 2016-5-13 10:58:11 | 显示全部楼层
本帖最后由 wgs7909 于 2016-5-13 10:59 编辑
负暄 发表于 2016-5-13 08:48
在baas中,一开始把参数获得:
Object columns = params.get("columns");
Integer limit = params.getInteg ...

问题的关键是ScrollView组件是怎么知道还有下一页的呢?
一切都是安照你的这个思路来做的,结果是一打开页面的时候只显示第一页面的内容,下面显示“已经到最后”。但是数据库里是存在很多记录的。
上滑也不会加载更多,但是下拉可以实现刷新的。
因此我分析,ScrollView组件需要知道总共有多少条记录。


从另外一个角度分析ScrollView组件不需要知道一共有多少条记录,只要上滑,就去后台拿数据,拿到了,就显示,拿不到就提示 “已经到最后”。
这里存在一个关键问题,拿到数据的条数与设置的分页条件,如果小于设定数,直接显示“已经到最后”,如果等于分页数,就显示加载更多。通过我的验证,这种分析被推翻了,设定每页20条,数据库里正好放20条,按刚才的分析,如果加载更多的话,至少会产生一次向后台要数据的请求,可是事实上并没有发出请求,也就是说ScrollView已经知道所有行数为20,正好显示一页。所以下面直接就显示“已经到最后”,而不是向后台要一次数据,判断返回条数为0,然后再显示已经到最后。


综上所述:不管是通过什么方式向后台请求数据,返回的结果里一定会包含总条数。否则官方提供的SqlQuery的实现类里,不可能有一个countSql参数,并且是必填的。

企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
回复 支持 反对

使用道具 举报

发表于 2016-5-13 11:02:58 | 显示全部楼层
参考:/Baas/justep/demo.service.m
action queryUser 就有这个参数的


countSql 的配置里面写这个sql语句实现
$C%CI@HEG(VJQVTZI_3R$H0.png
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
 楼主| 发表于 2016-5-13 11:12:43 | 显示全部楼层
liangyongfei 发表于 2016-5-13 11:02
参考:/Baas/justep/demo.service.m
action queryUser 就有这个参数的

我想知道的是我自己写了一个JAVA类来实现查询动作的时候,如何把这个count的结果返回回给前台,如何能让前台的ScrollView组件能得到这个COUNT,实现加载更多的分页功能
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
回复 支持 反对

使用道具 举报

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
 楼主| 发表于 2016-5-13 11:13:54 | 显示全部楼层

我找到了新的证据支付4楼的论点。
通过平台提供的sqlQuery实现类,请求数据的时候,返回结果里有一个重要的信息sys.count:26.这个数字就是通过给定的一个sqlCount查出来的。
所以说如果我们自己写的实现类,想达到分页的效果,就必须返回这样一个参数。
QQ截图20160513102013.jpg
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
回复 支持 反对

使用道具 举报

56

主题

370

帖子

963

积分

高级会员

Rank: 4

积分
963
QQ
发表于 2016-5-13 12:36:07 | 显示全部楼层
测了一下,我的程序分页确实不对,limit,offset没有起作用。等你的研究结果出来,学习一下。
回复 支持 反对

使用道具 举报

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
 楼主| 发表于 2016-5-13 13:52:24 | 显示全部楼层
负暄 发表于 2016-5-13 12:36
测了一下,我的程序分页确实不对,limit,offset没有起作用。等你的研究结果出来,学习一下。 ...

我的结果已经出来了啊!仔细看7楼的图,getBgasSqlQuery调用的就是平台提供的sqlQuery实现类,仔细看返回的table结果,里面除了row之外还有一个userdata.sys.count,这个值很关键,就是提供给ScrollView组件使用的。
如果你不是调用的平台提供的sqlQuery实现类的,而是自己写了个java类,那么返回的时候不光要返回table,还需要统计总的行数,把总行数返回来。我没有这样的类,所以我没了验证。但我觉得应该是这样,你可以验证一下,成功后把JAVA代码贴出来。
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
回复 支持 反对

使用道具 举报

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
 楼主| 发表于 2016-5-22 16:49:01 | 显示全部楼层
本帖最后由 wgs7909 于 2016-5-22 17:19 编辑
liangyongfei 发表于 2016-5-13 11:02
参考:/Baas/justep/demo.service.m
action queryUser 就有这个参数的

又在这里出问题啦!!
又郁闷了,countSql查出来的结果是12条,limit调用的地方传入的值是5,而得到的结果sys.count总是1。也就是说我永远只能看到第一页面的内容。

我故意把countSql搞错了,让系统报错出来。这个SQL拿出来查询的结果是12。按理说sys.count应该是3才对啊!为什么一直是1,实在搞不明白了。
QQ截图20160522164338.jpg
QQ截图20160522165619.jpg
QQ截图20160522171817.jpg
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-24 17:44 , Processed in 0.058704 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表