索引
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
此查询器要绑定的DataModel
propertyName
指定此查询器要根据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()
销毁此快速查询器这是一个测试用例,请注意控制台输出,如果测试没通过会拋出异常信息: