发布于2026-07-22 阅读(0)
扫一扫,手机访问
用 ArrayCollection 做数据源的那些坑,网上几乎找不到像样的例子,全靠自己一步步踩过来。说实话,把上万条数据塞进滚动条本身就是个糟糕的设计,但没办法,段位不够,拍不了板。
官方文档里其实提过一句:使用 ItemRenderer 的大数据控件,在渲染时并不会一次性创建所有数据列/行的显示对象(ItemRenderer),它只会创建屏幕上可见的部分,然后重复利用这些对象来提升运行时效率。
话是这么说,但一到实际拖动滚动条,花屏、空白就冒出来了。根本原因还是 Tree 组件内部用的也是 ItemRenderer,渲染延迟导致的。
解决办法倒不复杂:在 Tree 的 scroll 事件里调用 myTree.invalidateList() 方法,强制刷新树。简单粗暴,但有效。
自动获取树数据后,明明数据量已经超过了显示范围,滚动条就是不出来。这种情况通常发生在数据异步加载或动态更新时。
解决方法是:拿到数据后,手动触发集合事件。具体做法如下:
arrayCollection.itemUpdated(item);
arrayCollection.dispatchEvent(new CollectionEvent(
CollectionEvent.COLLECTION_CHANGE,
false, false,
CollectionEventKind.ADD,
-1, -1, [item]
));
说白了,就是通知 ArrayCollection 数据变了,让它重新计算总行数,滚动条自然就出来了。
这两个坑看似简单,但没经验的人栽进去能折腾半天。记下来,下次少走弯路。