摘要:但本活又己交给音长争标识我。八说前它特用达圆是路看江才。开次他争从点军容给油很出。成育料技所心并精北酸间办元。除现七团一历积动两水矿花始线党党她。
好快, 1分钟写好下拉刷新,滚动加载自动分页列表 前言
欢迎关注BUI Webapp专栏 或者 bui神速微信公众号.
以往文章:
2019开发最快的Webapp框架--BUI交互框架
微信Webapp开发的各种{{BANNED}}路由需求及解决办法!
【BUI实战篇】BUI数据驱动做的拼图游戏 Webapp移动适配版,基于vuejs拼图游戏改造
webapp结合Dcloud平台打包图文教程
一张脑图看懂BUI Webapp移动快速开发框架【上】--框架与工具、资源
一、观看实操视频点击观看视频实录
安装完以下环境后, 从0到1, 手把手教, 你也可以做到!二、开发准备
安装buijs cli命令行工具(需要先安装node环境, 建议使用node 8.x);
如何安装使用buijs?
安装bui-fast 快速编辑器插件(推荐vscode);
如何安装使用bui-fast?
打开跨域的chrome浏览器;
如何打开跨域的Chrome浏览器?三、开发过程 使用 buijs 构建工程
1.创建Webapp工程
buijs create demo
2.安装依赖
cd demo/ npm install
windows 推荐使用淘宝的 cnpm install
3.运行预览
npm run dev使用bui-fast编辑器插件生成控件
视频里使用的是vscode 可以在安装插件那里找到 bui-fast.
xxx 假设为控件名
生成规则1:
在html里, 使用 ui-xxx 生成控件结构
ui-list
生成以下结构
在js里, 使用 bui-xxx 生成控件的初始化代码
bui-list
生成以下初始化代码
// 列表控件 js 初始化: var uiList = bui.list({ id: "#uiList", url: "http://rap2api.taobao.org/app/mock/84605/example/getNews", pageSize: 5, data: {}, //如果分页的字段名不一样,通过field重新定义 field: { page: "page", size: "pageSize", data: "data" }, callback: function(e) {}, template: function(data) { var html = ""; data.forEach(function(el, index) { html += `
${el.address}
${el.distance}公里
常用参数说明:
id 用来跟结构绑定
url 数据请求的地址
data 数据请求需要
height 列表的高度
page 从第几页开始请求
pageSize 要返回多少条数据
field 字段映射
template 根据返回的数据, 渲染自定义模板,支持es6模板
callback 为每一行添加一个点击事件,比方点击跳转
onRefresh 下拉刷新的时候触发回调
onLoad 上拉滚动到底部的时候触发回调
1. 滚动自动分页原理滚动的第一要素就是高度, 当内容撑出容器的高度,才会产生滚动条, 才能监听id的滚动事件, 可以知道是否已经滚动到底部, 到底部则自动发起新一页的请求.
2. 为何有时候会请求多次?这里我们需要解决的第一个问题,就是高度, 所以我们可以传height参数,默认是0, 为0,则会自动计算列表的页面剩余高度.
有了高度以后, 我们要计算请求返回的数据能不能撑开容器, 如果不行, 则自动请求下一页, 直到容器被撑开, 所以你会看到pageSize 设置的值较小的时候, 页面会发起第2次请求, 就是这个原因.
3. 如何知道返回的数据在哪个字段?我们来看一下这个接口返回的数据是什么?
http://rap2api.taobao.org/app/mock/84605/example/getNews
这个是淘宝的mock模拟接口,随机返回数据, 返回一个 {data:[],info:"",status:""} 结构的数据.
{ data: [{ uid: 6801, name: "和再团之较", image: "http://dummyimage.com/200x134/4A7BF7&text=Thumbnail", phone: "17612327699", location: "惠城区", price: "65", distance: "52", status: 1, date: "2003-06-28", url: "gopher://brcce.cq/svku", email: "v.dmdtjgv@rwldcexzt.bi", time: "20:39:53", address: "海南省 三沙市 西沙群岛", detail: "式始众组月他政例了部自革每往子。但本活又己交给音长争标识我。八说前它特用达圆是路看江才。开次他争从点军容给油很出。成育料技所心并精北酸间办元。除现七团一历积动两水矿花始线党党她。" }], info: "获取成功", status: 0 }
那么问题来了? 不管接口的规则是后端还是前端定的, 控件并不事先知道接口的规则, 如果把规则限定死了, 那很多先开发接口再来学习移动端开发的还会选择bui框架吗?
我们来看看有没有漏了什么参数?
field 字段配置
这个就是用来做数据请求的字段映射, 比方, 我请求的接口地址是http://rap2api.taobao.org/app/mock/84605/example/getNews, 请求第几页是用的大写 PAGES 请求每页的大小 是用的 PAGESIZES; 那么 field 的配置应该为:
{ page: 2, pageSize: 20, field: { page: "PAGES", size: "PAGESIZES" } }
那么接口就会请求为 http://rap2api.taobao.org/app/mock/84605/example/getNews?PAGES=2&PAGESIZES=20; 这样接口就能正常请求到对应的数据了, 那请求到以后的数据返回回来, 怎么知道数据在什么字段呢? 同样也是在field的 data 参数里面配置;
{ page: 2, pageSize: 20, field: { page: "PAGES", size: "PAGESIZES", data: "data" } }
如果返回的数据是嵌套多个层级呢? 比如返回
{ result: { data: [{ uid: 6801, name: "和再团之较", image: "http://dummyimage.com/200x134/4A7BF7&text=Thumbnail", phone: "17612327699", location: "惠城区", price: "65", distance: "52", status: 1, date: "2003-06-28", url: "gopher://brcce.cq/svku", email: "v.dmdtjgv@rwldcexzt.bi", time: "20:39:53", address: "海南省 三沙市 西沙群岛", detail: "式始众组月他政例了部自革每往子。但本活又己交给音长争标识我。八说前它特用达圆是路看江才。开次他争从点军容给油很出。成育料技所心并精北酸间办元。除现七团一历积动两水矿花始线党党她。" }], }, info: "获取成功", status: 0 }
那么我们就要找到该数据返回的数组字段在哪里? 你可以这样配置.
{ page: 2, pageSize: 20, field: { page: "PAGES", size: "PAGESIZES", data: "result.data" } }4. 如何知道已经到最后一页了?
我们操作一下刚刚生成的控件, 会看到底部有没有更多内容字样, 那怎么知道是否是最后一页了呢? 通过返回的数组大小, 跟你请求的每页大小做比对, 如果小余pageSize设置的值, 则认为已经是最后一页了.
实际上就是把 bui.ajax+bui.scroll+bui.pullrefresh几个控件的通用需求整合在一块, 这样我们就可以解决数据接口+控件整合, 又能抽离业务的一个控件. 通过简单配置,我们可以满足很多开发需求.
五、注意事项对于接口的请求必须返回数组才能操作, 非数组请使用 bui.scroll 控件;
如果高度自动计算不准确, 需要自行计算好告诉它;
如果是restful接口, 需要在接口设置允许这种问号传参的形式;
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/117583.html
摘要:但本活又己交给音长争标识我。八说前它特用达圆是路看江才。开次他争从点军容给油很出。成育料技所心并精北酸间办元。除现七团一历积动两水矿花始线党党她。 好快, 1分钟写好下拉刷新,滚动加载自动分页列表 前言 欢迎关注BUI Webapp专栏 或者 bui神速微信公众号. 以往文章: 2019开发最快的Webapp框架--BUI交互框架 微信Webapp开发的各种变态路由需求及解决办法! ...
摘要:上一篇我们实现了新闻列表,但在网络不好的时候列表会白屏,因此为了提高使用体验,往列表中加入懒加载效果。其次,引入一个内置的手势控件,用于支持下拉刷新列表的效果如下图将异步执行也进行了控件化处理,即。 上一篇我们实现了新闻列表,但在网络不好的时候列表会白屏,因此为了提高使用体验,往列表中加入懒加载效果。其次,引入一个Flutter内置的手势控件,用于支持下拉刷新列表的效果如下图: sho...
摘要:原文地址初衷如今移动端站点越来越多,滚动到底部加载数据和下拉刷新的需求非常的常见,即使现在很多站点也会有这样的需求,比如百度首页就有。 原文地址 https://github.com/fa-ge/Scrollload/blob/master/README.md 初衷 如今移动端站点越来越多,滚动到底部加载数据和下拉刷新的需求非常的常见,即使现在很多pc站点也会有这样的需求,比如百度首页...
阅读 774·2023-04-25 22:57
阅读 2999·2021-11-23 10:03
阅读 572·2021-11-22 15:24
阅读 3103·2021-11-02 14:47
阅读 2873·2021-09-10 11:23
阅读 3046·2021-09-06 15:00
阅读 3890·2019-08-30 15:56
阅读 3286·2019-08-30 15:52