索引
DataModel中Data非常多的情况下,查询某属性为某特定值的Data需要遍历整个DataModel,会造成很大的性能开销,
QuickFinder为DataModel中所有Data的特定属性建立map(映射表),可以显著提高查询速度,举个例子:
var quickFinder = new ht.QuickFinder(dataModel, "name");
这段代码中创建了一个QuickFinder并绑定了name属性,假如DataModel中有10个Data,前5个Data的name为name1,
后5个Data的name为name2,则此quickFinder内部维护的map中包含两个键值对,第一个key为name1,value为一个集合(包含DataModel中前5个Data),
第二个key为name2,value为一个集合(包含DataModel中后5个Data),当我们调用下面的API查询时:
var nodes = quickFinder.find("name1");
quickFinder直接把第一个键值对的值(包含前5个Data的集合)返回,无需遍历整个DataModel。
而且,这个quickFinder一旦建立,DataModel的任何变化都会影响它,比如新增Data或删除Data或Data的属性发生了变化,
quickFinder内部的映射表都会随之更新。假如您的项目中经常需要用到某个属性查询(比如name),可以在全局创建一个QuickFinder,在需要查询的地方即可使用这个快速查询器来提高性能。
有两个使用误区需要注意:
QuickFinder:这样做毫无意义,因为构建的过程也会遍历整个DataModel建立映射表dispose()方法:快速查询器内部监听了DataModel,以便DataModel发生变化时及时更新映射表,因此如果查询器不再使用,
一定要调用dispose()方法销毁监听,避免发生内存泄露使用此插件需要引入ht-quickfinder.js:
<script src="ht.js"></script> <!--先引入ht.js-->
<script src="ht-quickfinder.js"></script>
在上面的代码中已经介绍了构造函数参数中的前两个参数,下面是完整的参数列表:
dataMode 此查询器要绑定的DataModelpropertyName 指定此查询器要根据Data的哪个属性建立映射表accessType 指定propertyName的类型,枚举如下:null: 默认类型,如propertyName为age,采用getAge()的方式读取style:如propertyName为age,采用getStyle('age')的方式读取attr:如propertyName为age,采用getAttr('age')的方式读取valueFunc 指定取值方式,如要读取的属性值为js对象,可以用此参数返回js对象的唯一标识(映射表的key只能为字符串)filterFunc 过滤器函数,过滤掉不想查询的Data查询器上常用方法如下:
find(key) 根据关键字key查询Data,返回ht.List实例findFirst(key) 根据关键字key找到第一个匹配的Data并返回dispose() 销毁此快速查询器这是一个测试用例,请注意控制台输出,如果测试没通过会拋出异常信息: