实现目标:
大体框架是:数据库中有个merchant的集合,里面录入的是,每个用户对应的id、openid(这俩系统默认参数)还有自定义参数:name、age;wxml界面有button搜索按钮,有俩input分别是对name、age的搜索,还有下一页按钮next和上一页按钮last
如下:
id:*********12 id:*********34 id:*********56 id:*********78
openid:*********001 openid:******002 openid:*********003 openid:*********004
name:张三 name:李四 name:王五 name:赵一
age:20 age:20 age:21 age:22
想要实现搜索age是20的人,可以用
db.collection("merchant").where({
age:20
}).get({
success(res){
console.log(res.data)
},
fail(res){},
complete(res){}
})
在调试器里,显示了包含两个元素的数组,(内容大体是这样的,格式有点问题,勿怪)
array(0){id:**********12,openid:*********001,name:张三,age:20}
array(1){id:**********34,openid:*********002,name:李四,age:20}
我们可以在页面定义两个变量,然后分别把name和age值传过去,从而实现搜索结果的显示
但是,如果我想添加两个按钮:上一页和下一页。
实现:按一下button搜索,立即显示第一个数组,按一下下一页按钮next,才会显示第二按钮,而不是一下都显示出来俩数组
因为一维数组只能实现单个数组的显示,也就是只能显示array(0)或者array(1),虽然可以实现一般的条件搜索结果的储存,但是这里加了一个下一页按钮next和对age、name的搜索,不能每次按一下下一页按钮next,就重新对数据库来一遍搜索,然后,对搜索结果累加显示,那样就很麻烦了(还要对age、name搜索进行判断,是只搜索其中一个【其中一个input为空】,还是俩个都搜索【input都不为空】)。那样不如在button搜索事件里处理,而不是放到下一页按钮next里,而且对于按钮next、last,什么时候可以使用(disabled值)也要进行判断,(数据集合中未找到搜索目标时,直接showtoast一个提示:不能为空;只找到一个结果时,next和last都不能使用;找到两个以上结果时,则有相应变化:如图 [ ]为不可用,【】为可用
只有两个搜索结果时:
开始时: [last] 【next】
点一下next: 【last】 [next]
点一下last: [last] 【next】
三个搜索结果时:
开始时: [last] 【next】
点一下next: 【last】 【next】
点一下next: 【last】 [next]
点一下last: 【last】 【next】
点一下last: [last] 【next】
)
所以这里尽量把对搜索结果分页显示的处理放到搜索button按钮事件处理里
本来想直接在js的data里定义一个list[][2](只定义行长度2,未定义列长度,因为是动态加入信息的,所以也就不能限制录入信息个数),后来发下有很多问题,而且也找不到js文件data中,定义二维数组的例子,都想放弃了
后来想到wx小程序是有js的影子的,就去js里找找看了
后来想到了,别想着以二维数组的形式,把搜索结果录入到data的list[][2],而且这里开始也没法初始化,
于是,换了一个思路:把搜索结果,直接录入到临时二维数组list[dataleng][2]里,这里还可以利用datalength实现不限制录入信息个数的功能,一举两得;然后用that.setData({list:list}),定义到data里的list中,实现全局调用,代码如下
db.collection("merchant").where({
name:this.data.inputSearchName
}).get(({
success(res){
let dataLength=res.data.length
let list = new Array();(非常坑人的一点,大写大写大写,不然会出现奇怪的找不到错的报错!!!很坑很坑)
for(let n=0;n<dataLength;n++){
list[n]=new Array();
list[n][0]=res.data[n].name,
list[n][1]=res.data[n].age,
}
that.setData({
list:list
})
that.setData({
searchResult:("搜索结果:"+dataLength+"个")
}
},
fail(res){},
complete(res){}
}))
以上
总结:
开发会掉进坑,别怂,踩多了,爬出坑时,会更熟练哦哈哈 0.0