snapshot.docs"表示此更新事件发生后查询语句对应的查询结果"
而实际情况是,docs返回了所有的记录,没有关联where子句,不符合“查询语句”
当前查询语句是:
查询结果是7条
更新后,返回的snapshot:
查询语句没变:
返回的结果,docChanges显示有一条更新,但docs变成了所有记录,把查询语句where条件丢掉了:
调用语句如下:
8-14 又发现数据更新后orderby不能刷新
框架类型 | 问题类型 | 终端类型 | AppID | 环境ID | 基础库版本 |
---|---|---|---|---|---|
小程序 | Bug | 微信安卓客户端 | wx9228b752135ef593 | 1 | 1 |
2 个回答
watch 不支持在查询条件里加上正则匹配的。
这里有bug,应该在watch初始化的时候,就报错“不支持正则” 的,这里后续会完善。
//针对watcher不支持模糊检索,对change数据分别处理 .watch({ onChange: function(snapshot) { //初始化时type=init if (snapshot.type){ that.setData({ list: snapshot.docs, }); } //更新时 else{ let tmpBackList = that.data.list.slice(0); for( var i = 0; i < snapshot.docChanges.length; ++i ){ var docChange= snapshot.docChanges[i] var doc =docChange.doc; const index = tmpBackList.findIndex(item => item._id === doc._id); const search=doc.toDo.title.indexOf(that.data.searchStr) //校验搜索条件 switch ( docChange.dataType ) { //记录进入列表 case "add": //校验搜索条件 if ( search >=0 && index < 0 ){ //6-15出现重复数据 汉字多次watch,所以增加index校验 tmpBackList.push(doc); } break; case "replace": if (index >= 0 && search >=0){ //更新 tmpBackList.splice(index,1,doc); }else if(index < 0 && search >=0 ){ //更新的新增 tmpBackList.push(doc); }else if(index >= 0 && search < 0 ){ //更新的去除 tmpBackList.splice(index,1); } break; case "update": if (index >= 0 && search >=0){ //更新 tmpBackList.splice(index,1,doc); }else if(index < 0 && search >=0 ){ //更新的新增 tmpBackList.push(doc); }else if(index >= 0 && search < 0 ){ //更新的去除 tmpBackList.splice(index,1); } break; //记录离开列表 case "remove": if (index>= 0){ tmpBackList.splice(index,1); } break; //列表中的记录内容有更新,但列表包含的记录不变 default: console.log("toDay.watcher.onChange.default",doc); } } //更新列表 that.setData({ list: tmpBackList, }); }