美文网首页
layaBox:列表list渲染数据的时候,只渲染第一项

layaBox:列表list渲染数据的时候,只渲染第一项

作者: 一眼就认出你 | 来源:发表于2018-09-20 20:49 被阅读0次

部分代码:

主类:
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);

相关文章

网友评论

      本文标题:layaBox:列表list渲染数据的时候,只渲染第一项

      本文链接:https://www.haomeiwen.com/subject/nptonftx.html