ItemRender---之使用ClassFactory生成渲染器

来源:互联网 发布:单片机 英语 编辑:程序博客网 时间:2024/05/18 02:01

问题
你想在运行时修改List或DataGridColumn的渲染器,或改变渲染器的属性。

解决方案

使用ClassFactory对象作为Itemrenderer。ClassFactory实现了IFactory接口,你只要传一个类对象(即Class类型的对象)给它,它就可以生成这个类的对象。

 

讨论

 这种解决办法,使用了工厂设计模式,并且使用了flex的一些内部机制。在使用工厂模式时,你需要指定一个类型给工厂,这个类型的对象会被工厂类产生并作为渲染器使用,并且工厂类可以控制渲染器的生命周期。那么我们如何把类型指定给工厂类呢?我们需要传一个类对象给工厂类,正如下边的代码。

var factory:ClassFactory = new ClassFactory(oreilly.cookbook.SevenTwoFactor );

 

在这里原文提到了 SevenTwoFactor继承IFactory接口等等,大家需要多了解一些ClassFactory的相关知识,在实际操作中,我们一般都是创建ClassFactory的实例赋值itemRenderer。因为set itemRenderer方法需要的参数是IFactory类型,系统最终会用这个factory对象实例我们的itemRenderer。也就是说,我们给系统的不是一个itemRenderer而是一个能产生itemRenderer的factory,在系统需要时自己用factory产生itemRenderer的实例,也许信息的读者会发现,当我们写mxml的时候,itemRenderer的属性可以赋值一个类路径,这就是因为flex对mxml里的itemRenderer做了一些特殊的功能,如果你传的是一个类路径,系统会帮你创建一个ClassFactory。

例子:

DynamicRenderer 

 

SmallIconRenderer 

 

BigIconRenderer

 

原创粉丝点击