部分代码:
主类:
constructor() {
super();
//渲染监听
this.tabList.renderHandler = Laya.Handler.create(this, this.tabRenderHandler);
//模拟数据(有3项数据)
var listData: Array<any> = [];
for (var index: number = 0; index < 3; index++) {
let obj:Object=new Object();
if (index == 0) {
obj["serverRange"] = "最近" ;
} else {
var startNum: number = (index - 1) * 100 + 1;
var endNum: number = index * 100;
obj["serverRange"]=(startNum + "-" + endNum).toString();
}
listData.push(obj);
}
this.tabList.array = listData;
}
//渲染数据
private tabRenderHandler(item: serverTabItems, index: number): void {
item.show(item,index);
}
列表类:
public show(item: serverTabItems,index: number):void{
var data:any=this.dataSource;
this.t1.text=data["serverRange"];
}
理想效果:
image.png
实际效果:
image.png
出现这种效果的原因:在下列代码里面
this.tabList.renderHandler = Laya.Handler.create(this, this.tabRenderHandler);
api:注意第四个参数(once 是否只执行一次,如果为true,回调后执行recover()进行回收,默认为true。)
/**
* 从对象池内创建一个Handler,默认会执行一次并立即回收,如果不需要自动回收,设置once参数为false。
* @param caller 执行域(this)。
* @param method 回调方法。
* @param args 携带的参数。
* @param once 是否只执行一次,如果为true,回调后执行recover()进行回收,默认为true。
* @return 返回创建的handler实例。
*/
static create(caller: any, method: Function, args?: Array<any>, once?: boolean): Handler;
解决办法:
this.tabList.renderHandler = Laya.Handler.create(this, this.tabRenderHandler,null,false);
或者:每次渲染数据,都取创建一个Handler对象
this.tabList.renderHandler =new Handler(this, this.tabRenderHandler);
网友评论