query详解 ThingJS的 query 方法,是通过针对模型的id或者name或者自定义属性,类型等进行具体查询,模型的id或者name是在客户端摆放后进行设置: 自定义属性也是在客户端中也可以进行设置: 或者动态创建时添加的,见下图:
ThingJS 的 query 方法,包括 全局 和 局部。
全局查询是对所有场景内的对象进行查询;
局部查询 是在一个对象的子对象中进行查询,如在一个楼层内查询某个设备;如果还需要更精确的缩小查询范围,还可以对查询结果进行继续查询;
由于场景加载是异步的 所以要查询场景内的物体时,需要在场景加载完成后查询才生效。
全局查询: - var things = app.query(".Building");
复制代码局部查询: - building.query("[levelNum>2]").forEach(function(obj) {
复制代码不管是局部查询还是全局查询,查询条件一般是一个字符串,如:#100,car01,.Thing,或正则表达式,可以根据物体的名称、类型、包含的属性等进行查询,也可以对某个对象的子物体进行查询;但是 query 结果是一个集合 因此集合中的元素需要单独通过下标获取。 - // 查询id是100的对象
- app.query("#100")[0];
- // 查询名称(name)是 car01 的对象
- app.query("car01");
- // 查询物体类是Thing的对象
- app.query(".Thing");
- //有物体类型属性的,无论值是什么
- app.query("[alarm]");
- //查询物体类型属性是粮仓的对象
- app.query("[报警=normal]");
- app.query('["userData/物体类型"="粮仓"]');
- // 查询levelNum属性大于2的对象,目前支持 <= , < , = , > , >=
- app.query("[levelNum>2]");
- // 正则表达式(RegExp)对象,目前只是对名称(name)属性值进行正则匹配
- app.query(/car/);
- // 上例等同于
- var reg=new RegExp('car');
复制代码
查询结果返回的是一个 Selector 对象,查询结果可以相加、排除,也可以直接绑定事件,或一些批量操作 - //在查询结果中再进行查询,可实现多个条件的“与操作”
- var sel = app.query('.Thing').query( '[品牌=IBM]' );
- //实现多个条件的“或操作”
- var sel = app.query( '[品牌=IBM]' );
- app.query('[品牌=HP]').add( sel );
- //实现“非操作”,not 操作支持标准的条件
- building.query('.Thing').not( 'cabinetB0' );
复制代码
|