| 
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' );
 
  复制代码 
 
 |