- 浏览: 1063941 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
http://nianshi.iteye.com/blog/743830
如果您要显示大量 itemRenderer-无论在 DataGrid 还是在 AdvancedDataGrid 中-如果无法有效编写这些 itemRenderer, 您的应用程序性能可能受到负面影响。以下是一些可能有所帮助的提示:
•限制使用 itemRenderer 的列数。是否真的需要将每个列作为自定 itemRenderer?有时需要这样, 光芒太强是否会令用户头晕眼花?
•尝试不要过于频繁地更改 itemRenderer 中元素的样式。如果需要切换样式 (例如, 绿色用于正值, 红色用于负值) , 可考虑为这些样式创建两个控制预设并使其中一个可见。更改样式 Flex 中比较费时的任务之一。
•不要将 Containers 用作 itemRenderer 的基础。容器会占用大量资源。少量使用它们, 效果还不错; 但是根据 UIComponent 编写 itemRenderer 效率更高。
以下 itemRenderer 根据数据字段的值切换组件。
Java代码
1. <mx:Canvas>
2. <mx:Script><![CDATA private function lessThanZero() : Boolean {
3. return data.price < 0; }
4. ]]></mx:Script>
5. <mx:Label text="{data.price}" color="#FF0000" visible="{lessThanZero()}" />
6. <mx:Label text="{data.price}" color="#00FF00" visible="{!lessThanZero()}" />
7. </mx:Canvas>
<mx:Canvas>
<mx:Script><![CDATA private function lessThanZero() : Boolean {
return data.price < 0; }
]]></mx:Script>
<mx:Label text="{data.price}" color="#FF0000" visible="{lessThanZero()}" />
<mx:Label text="{data.price}" color="#00FF00" visible="{!lessThanZero()}" />
</mx:Canvas>
这比设置样式要快。要注意的其他事项包括:
•避免数据绑定到样式。更改样式不仅比大多数操作要慢, 而且在它上面添加数据绑定代码只会使它更糟。
•使用 Canvas 或扩展 ListItemRenderer 或作为 itemRenderer 的根。这允许您将控制放在各自上方。
扩展 UIComponent
目前编写 itemRenderer 最有效的方式是使用 ActionScript 类扩展 UIComponent。您可以全面控制代码, 并且渲染器也可以尽可能高效。
从上例切换样式开始, 编写一个扩展 UIComponent 的简单 itemRenderer。
Java代码
1. package renderers
2. {
3. import mx.controls.listClasses.IListItemRenderer;
4. import mx.core.UIComponent;
5.
6. public class PriceItemRenderer extends UIComponent implements IListItemRenderer
7. {
8. public function PriceItemRenderer()
9. {
10. super();
11. }
12. }
13. }
package renderers
{
import mx.controls.listClasses.IListItemRenderer;
import mx.core.UIComponent;
public class PriceItemRenderer extends UIComponent implements IListItemRenderer
{
public function PriceItemRenderer()
{
super();
}
}
}
您会发现我不仅编写这个类来扩展 UIComponent, 还由它实施 IListItemRenderer 接口。这样做是有必要的, 因为 List 控制将需要任何渲染器实施该接口, 否则您会收到运行时错误, 因为列表尝试将渲染器转换为该接口。
如果阅读 IListItemRenderer 的相关文档, 您会发现这是一个许多其他接口的集合, UIComponent 会为您实施其中的大多数。但有一个 IListItemRenderer 扩展的接口是 UIComponent 不实施的:IDataRenderer。这需要您添加代码, 为 itemRenderer 类提供您一直使用的 data 属性。
如果您尝试不实施 IDataRenderer 就使用这个类, 则编译代码时会收到以下错误:
•1044:类 renderers:PriceItemRenderer 未实施名称空间 mx.core:IDataRenderer 中的接口方法 get data。
编辑这个类并将它更改为以下内容:
Java代码
1. package renderers
2. {
3. import mx.controls.listClasses.IListItemRenderer;
4. import mx.core.UIComponent;
5. import mx.events.FlexEvent;
6.
7.
8. public class PriceItemRenderer extends UIComponent implements IListItemRenderer
9. {
10. public function PriceItemRenderer()
11. {
12. super();
13. }
14.
15. // Internal variable for the property value.
16.
17. private var _data:Object;
18. // Make the data property bindable.
19.
20. [Bindable("dataChange")]
21. // Define the getter method.
22.
23. public function get data():Object {
24.
25. return _data;
26.
27. }
28. // Define the setter method, and dispatch an event when the property
29.
30. // changes to support data binding.
31.
32. public function set data(value:Object):void {
33.
34. _data = value;
35.
36. dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
37.
38. }
39. }
40. }
package renderers
{
import mx.controls.listClasses.IListItemRenderer;
import mx.core.UIComponent;
import mx.events.FlexEvent;
public class PriceItemRenderer extends UIComponent implements IListItemRenderer
{
public function PriceItemRenderer()
{
super();
}
// Internal variable for the property value.
private var _data:Object;
// Make the data property bindable.
[Bindable("dataChange")]
// Define the getter method.
public function get data():Object {
return _data;
}
// Define the setter method, and dispatch an event when the property
// changes to support data binding.
public function set data(value:Object):void {
_data = value;
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
}
}
我直接使用 IDataRenderer 的 Flex 文档中的代码, 这样您都不用自己键入它。
移除它后, 您可以加入两个标签。
1.添加变量用于存放这两个标签。
private var posLabel:Label; private var negLabel:Label;
2.将 set data 函数修改为调用 invalidateProperties()。这很重要, 因为更改数据必须更改标签中的文本以及它们的可视性。
Java代码
1. public function set data(value:Object):void {
2. _data = value;
3. invalidateProperties();
4. dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
5. }
public function set data(value:Object):void {
_data = value;
invalidateProperties();
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
调用 invalidateProperties() 会告知 Flex 框架在适当的时间调用 commitProperties() 函数。
3.覆盖 createChildren() 并创建标签, 添加它们以显示组件列表。注意, 除了创建标签外, 还会设置它们的样式和 visible 属性。
Java代码
1. override protected function createChildren() : void
2. {
3. super.createChildren();
4. posLabel = new Label();
5. posLabel.visible = false;
6. posLabel.setStyle("color", 0×00FF00);
7. addChild(posLabel);
8. negLabel = new Label();
9. negLabel.visible = false;
10. negLabel.setStyle("color", 0xFF0000);
11. addChild(negLabel);
12. }
override protected function createChildren() : void
{
super.createChildren();
posLabel = new Label();
posLabel.visible = false;
posLabel.setStyle("color", 0×00FF00);
addChild(posLabel);
negLabel = new Label();
negLabel.visible = false;
negLabel.setStyle("color", 0xFF0000);
addChild(negLabel);
}
4.覆盖 commitProperties() 以设置标签的文本和可视性。过去, 您一直通过覆盖 set data 进行这类更改, 如果您喜欢, 也可以在这个类中那样做。
Java代码
1. override protected
2. function commitProperties():void
3. {
4. super.commitProperties();
5. posLabel.text = data.price;
6. negLabel.text = data.price;
7. posLabel.visible = Number(data.price) > 0;
8. negLabel.visible = Number(data.price) < 0;
9. }
override protected
function commitProperties():void
{
super.commitProperties();
posLabel.text = data.price;
negLabel.text = data.price;
posLabel.visible = Number(data.price) > 0;
negLabel.visible = Number(data.price) < 0;
}
5.覆盖 updateDisplayList() 以设置标签大小并进行定位。您必须设置标签大小, 因为它们的默认大小为 0×0。这是 Container 类将为您做的另一件事。由于这个 itemRenderer 十分简单, 您只需将标签大小设置为与 itemRenderer 大小匹配即可。
Java代码
1. override protected function updateDisplayList(
2. unscaledWidth:Number, unscaledHeight:Number ) : void
3. {
4. super.updateDisplayList(unscaledWidth, unscaledHeight);
5. posLabel.move(0,0);
6. posLabel.setActualSize(unscaledWidth,unscaledHeight);
7. negLabel.move(0,0);
8. negLabel.setActualSize(unscaledWidth, unscaledHeight);
9. }
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; 本系列之前的文章中讨论过这个操作。
如果您要显示大量 itemRenderer-无论在 DataGrid 还是在 AdvancedDataGrid 中-如果无法有效编写这些 itemRenderer, 您的应用程序性能可能受到负面影响。以下是一些可能有所帮助的提示:
•限制使用 itemRenderer 的列数。是否真的需要将每个列作为自定 itemRenderer?有时需要这样, 光芒太强是否会令用户头晕眼花?
•尝试不要过于频繁地更改 itemRenderer 中元素的样式。如果需要切换样式 (例如, 绿色用于正值, 红色用于负值) , 可考虑为这些样式创建两个控制预设并使其中一个可见。更改样式 Flex 中比较费时的任务之一。
•不要将 Containers 用作 itemRenderer 的基础。容器会占用大量资源。少量使用它们, 效果还不错; 但是根据 UIComponent 编写 itemRenderer 效率更高。
以下 itemRenderer 根据数据字段的值切换组件。
Java代码
1. <mx:Canvas>
2. <mx:Script><![CDATA private function lessThanZero() : Boolean {
3. return data.price < 0; }
4. ]]></mx:Script>
5. <mx:Label text="{data.price}" color="#FF0000" visible="{lessThanZero()}" />
6. <mx:Label text="{data.price}" color="#00FF00" visible="{!lessThanZero()}" />
7. </mx:Canvas>
<mx:Canvas>
<mx:Script><![CDATA private function lessThanZero() : Boolean {
return data.price < 0; }
]]></mx:Script>
<mx:Label text="{data.price}" color="#FF0000" visible="{lessThanZero()}" />
<mx:Label text="{data.price}" color="#00FF00" visible="{!lessThanZero()}" />
</mx:Canvas>
这比设置样式要快。要注意的其他事项包括:
•避免数据绑定到样式。更改样式不仅比大多数操作要慢, 而且在它上面添加数据绑定代码只会使它更糟。
•使用 Canvas 或扩展 ListItemRenderer 或作为 itemRenderer 的根。这允许您将控制放在各自上方。
扩展 UIComponent
目前编写 itemRenderer 最有效的方式是使用 ActionScript 类扩展 UIComponent。您可以全面控制代码, 并且渲染器也可以尽可能高效。
从上例切换样式开始, 编写一个扩展 UIComponent 的简单 itemRenderer。
Java代码
1. package renderers
2. {
3. import mx.controls.listClasses.IListItemRenderer;
4. import mx.core.UIComponent;
5.
6. public class PriceItemRenderer extends UIComponent implements IListItemRenderer
7. {
8. public function PriceItemRenderer()
9. {
10. super();
11. }
12. }
13. }
package renderers
{
import mx.controls.listClasses.IListItemRenderer;
import mx.core.UIComponent;
public class PriceItemRenderer extends UIComponent implements IListItemRenderer
{
public function PriceItemRenderer()
{
super();
}
}
}
您会发现我不仅编写这个类来扩展 UIComponent, 还由它实施 IListItemRenderer 接口。这样做是有必要的, 因为 List 控制将需要任何渲染器实施该接口, 否则您会收到运行时错误, 因为列表尝试将渲染器转换为该接口。
如果阅读 IListItemRenderer 的相关文档, 您会发现这是一个许多其他接口的集合, UIComponent 会为您实施其中的大多数。但有一个 IListItemRenderer 扩展的接口是 UIComponent 不实施的:IDataRenderer。这需要您添加代码, 为 itemRenderer 类提供您一直使用的 data 属性。
如果您尝试不实施 IDataRenderer 就使用这个类, 则编译代码时会收到以下错误:
•1044:类 renderers:PriceItemRenderer 未实施名称空间 mx.core:IDataRenderer 中的接口方法 get data。
编辑这个类并将它更改为以下内容:
Java代码
1. package renderers
2. {
3. import mx.controls.listClasses.IListItemRenderer;
4. import mx.core.UIComponent;
5. import mx.events.FlexEvent;
6.
7.
8. public class PriceItemRenderer extends UIComponent implements IListItemRenderer
9. {
10. public function PriceItemRenderer()
11. {
12. super();
13. }
14.
15. // Internal variable for the property value.
16.
17. private var _data:Object;
18. // Make the data property bindable.
19.
20. [Bindable("dataChange")]
21. // Define the getter method.
22.
23. public function get data():Object {
24.
25. return _data;
26.
27. }
28. // Define the setter method, and dispatch an event when the property
29.
30. // changes to support data binding.
31.
32. public function set data(value:Object):void {
33.
34. _data = value;
35.
36. dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
37.
38. }
39. }
40. }
package renderers
{
import mx.controls.listClasses.IListItemRenderer;
import mx.core.UIComponent;
import mx.events.FlexEvent;
public class PriceItemRenderer extends UIComponent implements IListItemRenderer
{
public function PriceItemRenderer()
{
super();
}
// Internal variable for the property value.
private var _data:Object;
// Make the data property bindable.
[Bindable("dataChange")]
// Define the getter method.
public function get data():Object {
return _data;
}
// Define the setter method, and dispatch an event when the property
// changes to support data binding.
public function set data(value:Object):void {
_data = value;
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
}
}
我直接使用 IDataRenderer 的 Flex 文档中的代码, 这样您都不用自己键入它。
移除它后, 您可以加入两个标签。
1.添加变量用于存放这两个标签。
private var posLabel:Label; private var negLabel:Label;
2.将 set data 函数修改为调用 invalidateProperties()。这很重要, 因为更改数据必须更改标签中的文本以及它们的可视性。
Java代码
1. public function set data(value:Object):void {
2. _data = value;
3. invalidateProperties();
4. dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
5. }
public function set data(value:Object):void {
_data = value;
invalidateProperties();
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
调用 invalidateProperties() 会告知 Flex 框架在适当的时间调用 commitProperties() 函数。
3.覆盖 createChildren() 并创建标签, 添加它们以显示组件列表。注意, 除了创建标签外, 还会设置它们的样式和 visible 属性。
Java代码
1. override protected function createChildren() : void
2. {
3. super.createChildren();
4. posLabel = new Label();
5. posLabel.visible = false;
6. posLabel.setStyle("color", 0×00FF00);
7. addChild(posLabel);
8. negLabel = new Label();
9. negLabel.visible = false;
10. negLabel.setStyle("color", 0xFF0000);
11. addChild(negLabel);
12. }
override protected function createChildren() : void
{
super.createChildren();
posLabel = new Label();
posLabel.visible = false;
posLabel.setStyle("color", 0×00FF00);
addChild(posLabel);
negLabel = new Label();
negLabel.visible = false;
negLabel.setStyle("color", 0xFF0000);
addChild(negLabel);
}
4.覆盖 commitProperties() 以设置标签的文本和可视性。过去, 您一直通过覆盖 set data 进行这类更改, 如果您喜欢, 也可以在这个类中那样做。
Java代码
1. override protected
2. function commitProperties():void
3. {
4. super.commitProperties();
5. posLabel.text = data.price;
6. negLabel.text = data.price;
7. posLabel.visible = Number(data.price) > 0;
8. negLabel.visible = Number(data.price) < 0;
9. }
override protected
function commitProperties():void
{
super.commitProperties();
posLabel.text = data.price;
negLabel.text = data.price;
posLabel.visible = Number(data.price) > 0;
negLabel.visible = Number(data.price) < 0;
}
5.覆盖 updateDisplayList() 以设置标签大小并进行定位。您必须设置标签大小, 因为它们的默认大小为 0×0。这是 Container 类将为您做的另一件事。由于这个 itemRenderer 十分简单, 您只需将标签大小设置为与 itemRenderer 大小匹配即可。
Java代码
1. override protected function updateDisplayList(
2. unscaledWidth:Number, unscaledHeight:Number ) : void
3. {
4. super.updateDisplayList(unscaledWidth, unscaledHeight);
5. posLabel.move(0,0);
6. posLabel.setActualSize(unscaledWidth,unscaledHeight);
7. negLabel.move(0,0);
8. negLabel.setActualSize(unscaledWidth, unscaledHeight);
9. }
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; 本系列之前的文章中讨论过这个操作。
发表评论
-
Flex数据绑定及其使用频繁的几种情况
2011-10-20 03:39 1402http://developer.51cto.com/art/ ... -
揭开Flex正则表达式的神秘面纱
2011-10-20 03:38 1176http://developer.51cto.com/art/ ... -
Flex模块化开发优势及技巧解析
2011-10-20 03:38 1702http://developer.51cto.com/art/ ... -
Flex模块化应用程序开发
2011-10-20 03:38 1127http://developer.51cto.com/art/ ... -
[转]Flex模块化的目的及其步骤
2011-10-20 03:35 1159http://developer.51cto.co ... -
翻译: Flash文本引擎, 第三部分: 布局
2011-10-20 02:36 0http://www.riade ... -
翻译: Flash文本引擎, 第二部分: 交互
2011-10-20 02:34 0http://www.riadev.com/flex-thre ... -
翻译: Flash文本引擎, 第一部分: 概述
2011-10-20 02:33 0http://www.riadev.com/flex-thre ... -
[转]flex操作XML,强力总结帖
2011-08-16 01:10 1009http://qiqishou.iteye.com ... -
[转]用ActionScript 开发高级可视化组件
2011-08-14 04:37 0用ActionScript 开发高级可视化组件 -
[转]AIR2.0 NativeProcess in Flash Builder 4.0
2011-08-07 23:37 1425AIR2.0 NativeProcess in Fla ... -
[转] Actionscript项目嵌入图片(设置九宫格缩放)
2011-07-27 02:04 2326我们知道在Flex项目中,嵌入外部图片,可以使用 [E ... -
[转]NumericStepper添加百分号
2011-07-26 23:32 1098请问 NumericStepper组件中添加百分号 ... -
[新闻资讯] [Flash/Flex] 走自己的路:重写AIR移动应用程序中的BACK按键
2011-06-15 13:44 1199http://bbs.9ria.com/viewthread. ... -
[转]关于Spark List控件和Spark DataGrid控件的提示
2011-06-02 05:23 1402http://bbs.9ria.com/viewthread. ... -
flex 3 能使用openwithDefaultApplication吗
2011-06-02 05:05 0最近用到了 使用air 来开启外部的程序。 我知道flash ... -
[Flex]Flex编程注意之Flex Complier参数
2011-05-19 19:56 1047http://fykyx521.iteye.com/blog/ ... -
Aarry和AarryCollection
2011-05-18 00:06 1187在AS3里面,数组里面可以存储字符串、数字、布尔值、或引用的类 ... -
[Flash/Flex] 给一个TitleWindow添加按钮的方法
2011-05-07 01:38 1663资讯类型: 翻译 来源页面: http://userflex. ... -
[转][Android] Android桌面应用程序-交通灯游戏源码
2011-04-25 02:46 0http://bbs.9ria.com/viewthread. ...
相关推荐
理解_Flex_itemRenderer 理解_Flex_itemRenderer 理解_Flex_itemRenderer
详细介绍Flex的项目呈现器的各种初级用法以及高级用法,相当实用。
关于flex的itemRenderer的介绍,还算比较详细。
NULL 博文链接:https://baiyejianxin.iteye.com/blog/823229
flex itemRenderer 渲染机制的概念和使用
解决Flex内联itemRenderer的例子
flex中经常会使用到渲染器,这里简要介绍一下渲染器的一些知识
通过两种方法继承List组件的IconItemRenderer,实现在每个item项中添加组件,如button等
Flex项呈示器自定义及使用实例,展示用户信息,包括头像及等级信息。与博客Flex之旅--项呈示器ItemRenderer对应
用FLEX4做的项呈现器,仿雅虎聊天界面。 需要的字段为userId、nikeName、sex…… 你可以自行添加 声明,次呈现器只做模版使用。
NULL 博文链接:https://hcty31.iteye.com/blog/1190932
itemRenderer里面的内容 获取技巧。
<mx:itemRenderer> <mx:Component> <mx:CheckBox change=" {outerDocument.doSelect(data as Object)} " /> </mx:Component> </mx:itemRenderer> </mx:DataGridColumn> <mx:DataGridColumn headerText=...
Flex中嵌入Google地图 - 菩提树 - ITeye技术网站 分享:Flex builder3执行Debug需要安装的Flash Player Debugger环境 百度空间_应用平台 flex4 的DataGrid里面加一列CheckBox并实现数据交互的试验 - 暖阳下的猫的...
flex中渲染器简介 本系列讨论 Flex itemRenderer 以及如何高效、有效地使用它们。
FLEX4实践—动态生成DataGrid及应用客户化itemRenderer.doc
本文为大家详细介绍下Flex4如何使用itemRenderer 为Tree加线,感兴趣的朋友可以参考下
NULL 博文链接:https://liugang-ok.iteye.com/blog/1135551
Flex 中如何根据不同行的内容, 动态调整每行的颜色。完整代码
基于flex的最牛的datagrid做的节目或者课程播表,用ml存储数据,连接到别的页面.