首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

flex itemRenderer运用(五):效率

2012-11-23 
flex itemRenderer使用(五):效率如果您要显示大量 itemRenderer-无论在 DataGrid 还是在 AdvancedDataGrid

flex itemRenderer使用(五):效率
如果您要显示大量 itemRenderer-无论在 DataGrid 还是在 AdvancedDataGrid 中-如果无法有效编写这些 itemRenderer, 您的应用程序性能可能受到负面影响。以下是一些可能有所帮助的提示:

?限制使用 itemRenderer 的列数。是否真的需要将每个列作为自定 itemRenderer?有时需要这样, 光芒太强是否会令用户头晕眼花?
?尝试不要过于频繁地更改 itemRenderer 中元素的样式。如果需要切换样式 (例如, 绿色用于正值, 红色用于负值) , 可考虑为这些样式创建两个控制预设并使其中一个可见。更改样式 Flex 中比较费时的任务之一。
?不要将 Containers 用作 itemRenderer 的基础。容器会占用大量资源。少量使用它们, 效果还不错; 但是根据 UIComponent 编写 itemRenderer 效率更高。

以下 itemRenderer 根据数据字段的值切换组件。



这比设置样式要快。要注意的其他事项包括:

?避免数据绑定到样式。更改样式不仅比大多数操作要慢, 而且在它上面添加数据绑定代码只会使它更糟。
?使用 Canvas 或扩展 ListItemRenderer 或作为 itemRenderer 的根。这允许您将控制放在各自上方。

扩展 UIComponent

目前编写 itemRenderer 最有效的方式是使用 ActionScript 类扩展 UIComponent。您可以全面控制代码, 并且渲染器也可以尽可能高效。

从上例切换样式开始, 编写一个扩展 UIComponent 的简单 itemRenderer。
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number ) : void{             super.updateDisplayList(unscaledWidth, unscaledHeight);              posLabel.move(0,0);        posLabel.setActualSize(unscaledWidth,unscaledHeight);          negLabel.move(0,0);            negLabel.setActualSize(unscaledWidth, unscaledHeight);   }


所有这些只能做到这点似乎有点复杂, 但是请记住一点, 使用容器增加的代码要比这多得多。


UIComponent 类是所有可视 Flex 组件 (控制和容器) 的基础。以下是将 UIComponent 用作 itemRenderer 的一些相关提示。

?UIComponent 对其子代 (如 Container) 没有版面限制。您必须自己进行子代定位并调整大小。
?还可以超出 updateDisplayList() 中指定的大小绘制图形和位置子代。
?如果准备在列表中使用 variableRowHeight, 您还应覆盖 measure() 函数, 告知列表 itemRenderer 有多大。
?要将 UIComponent 用作 itemRenderer, 您必须实施 IDataRenderer。
?要使用 listData 属性, 您必须实施 IDropInListItemRenderer; 本系列之前的文章中讨论过这个操作。

热点排行