flex datagrid itemrender 渲染 问题及解决办法

来源:互联网 发布:淘宝采集软件是什么 编辑:程序博客网 时间:2024/06/05 10:47

项目中遇到这样一个问题: 在datagrid中加itemrender,itemrender中是个checkbox,checkbox根据当前行的数据决定是否选中它, 当设置datagrid的高度不能完全显示列表中数据时,滚动列表时checkbox有时选中有时不选中,且有时会选到其它行上:

 

问题分析:

假设您要显示 1,000 条记录。如果您认为列表控制会创建 1,000 个 itemRenderer, 您就错了。如果列表只显示 10 行, 它会创建约 12 个 itemRenderer-这些足以显示各个可见行, 多出的几个则用于缓冲和性能。列表最初显示行 1–10。当用户滚动这个列表时, 它现在可能显示行 3-12。但那 12 个 itemRenderer 仍在那里: 及时滚动列表后, 也不会新建任何 itemRenderer。

以下是 Flex 执行的操作。滚动列表时, 那些依然显示相同数据 (行 3-10) 的 itemRenderer 将向上移动。它们并未发生任何变化, 只是移到了新位置。之前显示行 1 和 行 2 数据的 itemRenderer 现在移到行 10 的 itemRendere 下。然后, 为那些 itemRenderer 提供行 11 和 行 12 的数据。换言之, 除非您调整列表大小, 否则将重用/循环使用那些相同的 itemRenderer-它们只是移到新位置并且现在显示新数据。

解决办法:1.设置datagrid高度可显示全部数据 ,即不会出现滚动条 ;

                    2.推荐方法 复写set data(value :Object):void方法,将要处理的过程放到此方法中

如:

注意;复写此方法必须调用父类set data方法 super.data = value; 不然数据会出错

参看:http://www.adobe.com/cn/devnet/flex/articles/itemrenderers_pt1.html