框架类型 | 问题类型 | 终端类型 | AppID | 环境ID | 基础库版本 |
---|---|---|---|---|---|
小程序 | Bug | 微信安卓客户端 | wx9228b752135ef593 | 1 | 1 |
snapshot.docs"表示此更新事件发生后查询语句对应的查询结果"
而实际情况是,docs返回了所有的记录,没有关联where子句,不符合“查询语句”
当前查询语句是:
查询结果是7条
更新后,返回的snapshot:
查询语句没变:
返回的结果,docChanges显示有一条更新,但docs变成了所有记录,把查询语句where条件丢掉了:
调用语句如下:
8-14 又发现数据更新后orderby不能刷新
网友回复
子杰:
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,
});
}