问题:List组件渲染完成后,通过其属性cells获取不到所有的cell
原因:出于性能考虑,采取了延迟渲染的机制
List组件的cells个数=属性repeatY + 1
分析:
1.List组件的var配置为list;设置List组件的repeatY=5;数据源赋值个数=7
2.则:list.cells.length=6,list.dataSource.length=7;
3.为什么list.cells.length=6呢?原因在于laya采取的预加载机制,即绘制单元格个数=repeatY + 1
4.那么list.getCell(6)会抛异常吗?不会的,见如下源码,返回的却是第一个单元格哦。
/**
*通过可视单元格索引,获取单元格。
*@param index 可视单元格索引。
*@return 单元格对象。
*/
__proto.getCell=function(index){
this.runCallLater(this.changeCells);
if (index >-1 && this._cells){
return this._cells[(index-this._startIndex)% this._cells.length];
}
return null;
}
5.如果cells.length>数据源个数,那么多余的cell值是什么呢?
加入cells.length=6,数据源个数=4,那么list.getCell(4).name="item5",list.getCell(4).name="item6"
解决办法:通过代码设置List组件repeatY属性=数据源的个数
参考代码:
list.repeatY = data.length;//一定要放在list.dataSource = data之前
list.dataSource = data;