`
on069on
  • 浏览: 10604 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

 
阅读更多

  问题
  你想在运行时修改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 
       height="300" itemRenderer="customItemrenderer.SmallIconRenderer " variableRowHeight="true">           
  SmallIconRenderer 
             
  BigIconRenderer
            
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics