使用ClassFactory 生成渲染器
来源:互联网 发布:javascript读取excel文件 编辑:程序博客网 时间:2024/05/21 06:35
你想要在运行时改变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:
BigIconRenderer.mxml:
SmallIconRenderer
使用一个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>
0 0
- 使用ClassFactory 生成渲染器
- ItemRender---之使用ClassFactory生成渲染器
- ClassFactory的使用
- Flex个人使用总结:ClassFactory,动态为DataGird添加渲染列
- ClassFactory
- Flex个人使用总结:ClassFactory
- 渲染器的使用
- 使用Ogre渲染生成的人物行走4-8图
- 使用Thymeleaf API渲染模板生成静态页面
- 使用lidar360和arcgis生成DEM渲染图
- FLEX 渲染器的简单使用
- EditorGridPanel和渲染器renderer的使用
- Swing JList渲染器--DefaultListCellRenderer的使用
- 渲染器
- ArcEngine 渲染的使用
- ArcEngine 渲染的使用
- ArcEngine 渲染的使用
- webbrowser使用ie9渲染
- 几个画图的js插件
- hd 2029 Palindromes _easy version
- 不管是追求幸福也好
- 50_枚举类型
- 一个早晨,一名牧师正在准备第二天的讲道词
- 使用ClassFactory 生成渲染器
- 1.通过分类为数组添加一个倒序的一个方法. 比如: 数组中元素为 @”aa”, @”bb”, @”cc”, @”dd”, @”ee”, 倒序完之后为: @”ee”, @”dd”,@”cc”,@”bb
- 51_读写字符
- win7:windows已遇到一个关键性问题 一分钟后自动重启 无限重启win7 联网重启
- Poj 3468 A Simple Problem with Integers 成段更新,区间求和
- 52_读写字符串
- FFMPEG 编码分析流程图
- iOS UIAppearance使用详解
- 53_格式化输出函数