首页 > 网站 > WEB开发 > 正文

7.2.使用ClassFactory 生成渲染器

2024-04-27 13:51:59
字体:
来源:转载
供稿:网友
7.2.1.问题
你想要在运行时改变List 或DataGridColumn 的渲染器,或改变渲染器的属性。
7.2.2.解决办法
使用一个ClassFactory 对象做为ItmeRdnerer。ClassFacotry 实现了IFactory 接口,你只要传一个类对象(即Class 类型的对象)给它,它就可以生成这个类的对象。
7.2.3.讨论
这种解决办法,使用了工厂设计模式,并且使用了flex 的一些内部机制。在使用工厂模式时,你需要指定一个类型给工厂,这个类型的对象会被工厂类产生并做为渲染器使用,并且工厂类可以控制渲染器的生命周期。那么我们如何把类型指定给工厂类呢?我们需要传一个类对象给工厂类,正如下边的代码:
+展开
-ActionScript
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 了,我看了本节后边evenTwoFactory 的代码,

觉得作者这样做没有必要,所以还是不扯SevenTwoFactory 和IFactory 的关系了,不然反倒让大家糊涂。在这里我们只需要知道, ClassFactory 的实例,赋值给list 或DataGrid的itemRenderer 属性,系统会帮我们产生item renderer。
+展开
-XML
<cookbook:PurgeList id="listitemRenderer="{factory}width="300"/>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表