收藏
评论

​createSelectorQuery设为全局变量以后每次会返回之前所有的查询

 queryMultipleNodes (){    

    const query = wx.createSelectorQuery().in(this)

   query.select('#the-id').boundingClientRect(function(res){      res.top // 这个组件内 #the-id 节点的上边界坐标    }).exec()  }


微信文档里面关于createSelectorQuery的使用大概就是这样的,今天我没仔细看。我的想法是首先我在onLoad里面声明一个全局的query,然后我需要查询某个节点的信息的时候我就用这个query去查询就好了。大概是下面这种样子:

let query
page{
  onLoad: function(){
    query = wx.createSelectorQuery().in(this)
  },
  setStatus: function(index){
    let that = this
    query.select("#id" + index).boundingClientRect(function(res){
      console.log(res)
        })
      }
    }).exec()
  }
}

代码一跑起来,因为会根据这个切背景色,开发工具直接变霓虹灯了。这个query会在下次调用的时候,返回之前所有query过的节点,比如说点击顺序id0->id2->id4->id7,query返回的结果就是[0],[0,2],[0,2,4],[0,2,4,7]这样的包含节点信息的数组。我看过代码,可以确定这个函数每次点击只会调用一次,但是query会按照你点击过的节点返回所有的信息。


看了一下exec函数的说明:

NodesRef SelectorQuery.exec(function callback)

执行所有的请求。请求结果按请求次序构成数组,在callback的第一个参数中返回。


可能是这里exec以后并不会清除之前select的节点信息而是会返回所有的请求,但是也没有提供一个清除之前查询过节点的接口。虽然不是bug,但是用起来感觉接口还是不够傻瓜啊。。。



收藏

1 个评论

  • 鸣
    2023-12-06

    你也发现了, 这个很弱智的. 而且相同的查询词不会合并, 查了几次就会返回多大的数组.

    2023-12-06
    赞同
    回复
登录 后发表内容