低代码实践(四)
关键点
-
如何判断当前openid是普通买家、商家、供应商?
-
一键搞定下拉刷新列表功能
-
添加页面返回后的列表页面没有刷新,怎么办?
如何判断当前openid是普通买家、商家、供应商?
首先,需要单独的一张模型(表)来存储openid和usertype的关系mapping,因此新建一个模型,如下:
然后,我们的预期是:这个模型中,比如我想把某微信账号的openid变成商家,那就增加这个openid和商家类型,如:
接着,我们定义两个global变量,分别用来保存当前用户是否为商家、当前用户是否为供应商:
然后就是代码部分,需要在app_launch中,判断当前openid是什么角色:
/**
* 可通过 app 获取或修改全局应用的 变量 状态 等信息
* 具体可以console.info 在编辑器Console面板查看更多信息
* 如果需要 async-await,请在方法前 async
**/
export default {
async onAppLaunch(launchOpts) {
app.state.userInfo={};
const result=await app.cloud.callConnector({
name: "getopenid_xxxxxxxxxxx",
methodName: "getopenid",
params:{}
});
app.state.userInfo.openid=result.openid; //赋给全局变量
$app.dataset.state.wx_openid=result.openid;
//判断当前openid是否为商家
$app.dataset.state.i_am_seller=false
let res1 = await app.cloud.dataSources.users_u9v16tm.wedaGetRecords({
"where": [
{
"key": "openid",
"rel": "eq",
"val": $app.dataset.state.wx_openid
},
{
"key": "user_type",
"rel": "eq",
"val": "1"
}
]
});
if(res1.total>0)
{
$app.dataset.state.i_am_seller=true
}
//判断当前openid是否为供应商
$app.dataset.state.i_am_provider=false
let res2 = await app.cloud.dataSources.users_u9v16tm.wedaGetRecords({
"where": [
{
"key": "openid",
"rel": "eq",
"val": $app.dataset.state.wx_openid
},
{
"key": "user_type",
"rel": "eq",
"val": "2"
}
]
});
if(res2.total>0)
{
$app.dataset.state.i_am_provider=true
}
},
onAppShow(appShowOpts) {
//console.log('---------> LifeCycle onAppShow', appShowOpts)
},
onAppHide() {
//console.log('---------> LifeCycle onAppHide')
},
onAppError(options) {
//console.log('---------> LifeCycle onAppError', options)
},
onAppPageNotFound(options) {
//console.log('---------> LifeCycle onAppPageNotFound', options)
},
onAppUnhandledRejection(options) {
//console.log('---------> LifeCycle onAppUnhandledRejection', options)
}
}
最后就是UI的绑定:
一键搞定下拉刷新列表功能
这个是最容易的部分,直接上界面设置:
搞定,很简单
添加页面返回后的列表页面没有刷新,怎么办?
这个两种解决方式:
- 不解决,但是提供下拉刷新功能,妥协来解决,就是上面这个方法
- 在page_show方法里,reload数据源
我们就说下reload方式:
/*
* 可通过 $page 获取或修改当前页面的 变量 状态 handler lifecyle 等信息
* 可通过 app 获取或修改全局应用的 变量 状态 等信息
* 具体可以 console.info 在编辑器Console面板查看更多信息
* 如果需要 async-await,请在方法前 async
*/
export default {
onPageLoad(query) {
},
async onPageShow() {
let res = await app.cloud.dataSources.bought_produ_xxxxxxxxx.wedaGetRecords({ //红色部分是模型标识,不是模型名称,是模型标识
"orderBy": "createdAt",
"orderType": "desc",
"pageNo": 1,
"pageSize": 5,
"where": [
{ //这里的where要根据各个页面的查询来,这里只是个sample
"key": "zt",
"rel": "eq",
"val": "2"
}
]
});
$page.dataset.state.wedaListMeta=res
},
onPageReady() {
// console.log('---------> LifeCycle onPageReady')
},
onPageHide() {
// console.log('---------> LifeCycle onPageHide')
},
onPageUnload() {
// console.log('---------> LifeCycle onPageUnload')
},
}
OK。
最后,再附上结论xmind图: