获取对象

有了场景,添加了对象,我们如何尽快找到对象呢?,下面将详细讲解通过 query 方法获取对象的方法。

获取对象方法

有如下几个方法:

  • 通过 parent,children 属性找到要控制的对象。
  • 通过类身上分类属性找到要控制的对象。
  • 使用 query 方法

query详解

ThingJS 的 query 方法,包括 全局局部

全局查询是对所有场景内的对象进行查询;

局部查询 是在一个对象的子对象中进行查询,如在一个楼层内查询某个设备;如果还需要更精确的缩小查询范围,还可以对查询结果进行继续查询;

help
注意事项

由于场景加载是异步的 所以要查询场景内的物体时,需要在场景加载完成后查询才生效。

全局查询:

var things = app.query(".Building");
for (var i = 0; i < things.length; i++) {
things[i].style.outlineColor = "#0000ff";
} 

局部查询:

 building.query("[levelNum>2]").forEach(function(obj) {
obj.style.outlineColor = "#0000ff";
}); 

不管是局部查询还是全局查询,查询条件一般是一个字符串,如:#100,car01,.Thing,或正则表达式,可以根据物体的名称、类型、包含的属性等进行查询,也可以对某个对象的子物体进行查询;但是 query 结果是一个集合 因此集合中的元素需要单独通过下标获取。

// 查询id是100的对象
app.query("#100")[0];

// 查询名称(name)是 car01 的对象
app.query("car01")[0];

// 查询物体类是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');
app.query(reg); 

查询结果返回的是一个 Selector 对象,查询结果可以相加、排除,也可以直接绑定事件,或一些批量操作;

//在查询结果中再进行查询,可实现多个条件的“与操作”
var sel =  app.query('.Thing').query( '[品牌=IBM]' );

//实现多个条件的“或操作”
var sel =  app.query( '[品牌=IBM]' );
app.query('[品牌=HP]').add( sel );

//实现“非操作”,not 操作支持标准的条件
building.query('.Thing').not( 'cabinetB0' );

//add操作除了上例中可添加 Selector 对象,还可以物体对象
app.query('.Thing').add( obj1 );
app.query('.Thing').add( [obj1,obj2.....] );

//not 操作除了上例中可通过添加条件实现,也可以直接输入物体对象或 Selector 对象
app.query('.Thing').not( obj1 );
app.query('.Thing').not( [obj1,obj2.....] );
app.query('.Thing').not( sel );

// 获取第一个元素
var obj = app.query('.Thing')[0];

// 循环选择器对象,数组方式
var objs = app.query('.Thing');
for (var i = 0; i < objs.length; i ++) {
console.log(objs[i]);
}

// 循环选择器对象(return false将不再循环)
app.query('.Thing').forEach(function(obj) {
    ......
});

//可批量进行操作,具体查看 [Selector]
app.query('.Thing').visible = false;
app.query('.Thing').style.color = "#ff0000";

//对查询到的结果每个物体进行绑定事件
app.query('.Thing').on('click', function(event) {
    console.log(event.object);
}); 
在线咨询
QQ交流群
微信公众号