List组件——渲染的cell个数机制

问题: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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值