import UI_ListItem from "./UI_ListItem"; import VirtualList from "./VirtualList"; const { ccclass, property } = cc._decorator; @ccclass export default class PM_UI_List extends cc.Component { @property(cc.Node) itemContainer: cc.Node = null; @property(cc.Node) copyeeItem: cc.Node = null; @property(cc.ScrollView) scroll: cc.ScrollView = null; mItems: cc.Node[] = []; ////// 虚拟列表 begin /////// @property isVirtual: boolean = false; @property({ type: cc.Integer, tooltip: "视口显示数量(用于虚拟列表)" }) viewPortItemCount: number = 1; ////// 虚拟列表 end /////// private addItems(data: T[]) { let _len = data.length; for (let i = 0; i < _len; i++) { let _item = cc.instantiate(this.copyeeItem); let _dataItem = data[i]; this.mItems.push(_item); let _itemCls = _item.getComponent(UI_ListItem); _itemCls.showInfo(_dataItem); _itemCls.itemData = _dataItem; this.itemContainer.addChild(_item); } } private mVirtualListMrg:VirtualList; private mListData: T[]; showList(data: T[]) { this.mListData = data; this.initDataIdx(); this.itemContainer.removeAllChildren(); if (!this.isVirtual) { this.addItems(data); } else { if(!this.mVirtualListMrg){ this.mVirtualListMrg = new VirtualList(); } this.mVirtualListMrg.initVirtualList(this.viewPortItemCount,this.mListData,this.itemContainer,this.scroll,this.copyeeItem) } } private initDataIdx() { this.mListData.forEach((item, idx) => { item["_list_idx_"] = idx; }) } }