你想要在运行时改变List 或DataGridColumn 的渲染器,或改变渲染器的属性。
使用一个ClassFactory 对象做为ItmeRdnerer。ClassFacotry 实现了IFactory 接口,你只
要传一个类对象(即Class 类型的对象)给它,它就可以生成这个类的对象。
这种解决办法,使用了工厂设计模式,并且使用了flex 的一些内部机制。在使用工厂模
式时,你需要指定一个类型给工厂,这个类型的对象会被工厂类产生并做为渲染器使用,并
且工厂类可以控制渲染器的生命周期。那么我们如何把类型指定给工厂类呢?我们需要传一
个类对象给工厂类,正如下边的代码:
var factory:ClassFactory = new ClassFactory(oreilly.cookbook.SevenTwoFactory);
在这里原文提到了SevenTwoFactory 继承IFactory 等等,大家需要多了解一些
ClassFactory 的相关知识,在实际操作中,我们一般都是创建ClassFactory 的实例赋值
itemRenderer,因为set itemRenderer 方法需要的参数是IFactory 类型,系统最终会用这
个factory 对象实例我们的renderer。也就是说,我们给系统的不是一个renderer 而是
一个能产生renderer 的factory,在系统需要时自己用factory 产生renderer 的实例,也
许细心的读者会发现,当我们写mxml 的时候,itemRenderer 的属性可以赋值一个类路径,
这就是因为flex 对mxml 里的itemRenderer 做了一些特殊的功能,如果你传的是一个类路
径,系统帮你创建一个ClassFactory。,在本节的例子中其实在我们的应用中
SevenTwoFactory 只需是一个普通的类就OK 了,我看了本节后边SevenTwoFactory 的代码,
觉得作者这样做没有必要,所以还是不扯SevenTwoFactory 和IFactory 的关系了,不然反
倒让大家糊涂。在这里我们只需要知道, ClassFactory 的实例,赋值给list 或DataGrid
的itemRenderer 属性,系统会帮我们产生item renderer。
<cookbook:PurgeList id="list" itemRenderer="{factory}" width="300"/>
DynamicRenderer.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">
<mx:Script>
<![CDATA[
public function changeRenderer():void
{
if(btnChange.label == "change to big"){
list.itemRenderer = new ClassFactory(BigIconRenderer);
//这里正如我在上边所说,这里只要传一个普通类就可以了,但实际开发中我们这里一般都传一个自定义组件,或类似的东西。
btnChange.label = "change to small";
} else {
var cf:ClassFactory = new ClassFactory(SmallIconRenderer);
//在下边的代码中我实例大家如何利用ClassFactory的properties属性给新生产的对象赋初值。
//cf.properties = {xx:"heihei};
var o:Object = new Object();
o.xx = "xixi";
cf.properties = o;
//上边的写法,和上边注掉的写法都是可以的.但我觉得更负责的写法是:
//if(cf.properties == null){
// cf.properties = new Object();
//}
//o.xx = "hehe";
list.itemRenderer = cf;
btnChange.label = "change to big";
}
}
]]>
</mx:Script>
<mx:List id="list" width="300" height="300" itemRenderer="SmallIconRenderer" variableRowHeight="true">
<mx:dataProvider>
<mx:Object label="this is item A"/>
<mx:Object label="this is item B"/>
<mx:Object label="this is item C"/>
<mx:Object label="this is item D"/>
</mx:dataProvider>
</mx:List>
<mx:Button id="btnChange" label="change to big"
click="changeRenderer()" x="308" y="10"/>
</mx:Application>
BigIconRenderer.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
[Bindable]
public var item:Object = new Object();
]]>
</mx:Script>
<mx:Label text="{data.label}" fontSize="20" fontWeight="bold" color="0xff0000"/>
<mx:Text text="大"/>
</mx:HBox>
SmallIconRenderer
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
[Bindable]
public var item:Object = new Object();
[Bindable]
public var xx:String;
]]>
</mx:Script>
<mx:Label text="{data.label}"/>
<mx:Text text="小"/>
<mx:Button label="{xx}"/>
</mx:HBox>
分享到:
相关推荐
flex渲染器flex渲染器flex渲染器
Flex学习笔记Flex学习笔记Flex学习笔记Flex学习笔记Flex学习笔记
这是作者自己亲自编写的教程,里面包含的有图解教程,各式jar,及配置文件,全部包含在内,如果你是一个决定学习flex初学者,我敢保证它肯定适合你!带上你走上flex开发旅途!
flex中渲染器简介 本系列讨论 Flex itemRenderer 以及如何高效、有效地使用它们。
flex学习笔记 flex学习笔记 flex学习笔记 flex学习笔记 flex学习笔记 flex学习笔记
FLEX 自动生成器
可以通过可视化界面的调整生成css,方便、高效。
这是一个不错的flex效果,可以通过图形效果里设置的内容给自己的flex工程设置CSS
最近开始学习Flex,其中用到了AS,AS2到AS3发生了很大的变化,完全的面向对象,知道这个特点以后我也一直没有特意的好好去学学AS3,但是随着最近学习的深入,还是有必要学习一下
flex学习记录flex学习记录flex学习记录flex学习记录flex学习记录flex学习记录
flex学习资料flex学习资料flex学习资料
Flex3 css样式代码自动生成 Flex3StyleExplorer
关与flex中项目渲染器的使用,有源码,说明详尽.仅供学习参考.
直接使用flex的sdk生成swc文件,很繁琐,而且对于大项目来说,是个头痛的事情。ant在对java打包生成jar时,它优良的设计显露无疑,这里我们使用它,来生成swc,完成项目编译打包。
Flex学习笔记1
flex 事件 代码生成器 , 可以自动生成flex代码,方便 很好用的
flex itemRenderer 渲染机制的概念和使用
语法分析自动生成工具的使用教程(源代码)。 将flex,bison结合使用可以生成复杂的编译程序。用来做编译程序的前端非常合适。
···flex和bison ····实现小型编译器 ···最终生成中间代码--四元式 ···可以实现if语句、for循环语句、while语句、变量声明和赋值语句的翻译
flex 学习笔记 初学flex的朋友 可以下载了看看 老鸟直接飘过。。。