在项目中自定义一个CheckboxGroup,这个控件里面包含多个Checkbox想控制Checkbox的行为:所以使用查找一下帮助使用flex中经典方法:
getDefinitionByName 函数的使用
public function getDefinitionByName(name:String):Object 参数 name:String - 类名称 as3中的getDefinitionByName函数是 返回 name 参数指定的类的类对象引用。 这样就可以使用这个方法根据已知类的路径的字符串来获取类的类对象引用。这样就可以利用这个特性让flash动态创建类的实例... 但问题是: 1. 使用getDefinitionByName方法获得的类必须是在发布的时候被编译到swf文中的,否则就会报错:"ReferenceError: Error #1065: 变量 <类的名字> 未定义。" 2. 由于使用import导入的类(只是作为查找类的路径)并不会在发布swf的时候被编译进去(当然flash.*包里面的类本身就是player中的),只用在代码中使用到的类才会被编译进去... 那么,要使用这个方法来实现动态执行怎么办? 只有把可能需要的所有类包含在代码中(比如在定义变量的类型声名时使用 *),并且在开始声名此类,声名时可以随便使用个名字,这样才能使用getDefinitionByName方法... -------------------------------------------------
因为内置类库肯定会被编译到swf里,这样反射就能拿到。而自定义的类,如果整个工程里都没有用到,即使import也不会被编译(不然swf里的垃圾成分太多)。我建议可以把需要反射的类库生成一个swf去载入,或者在工程的什么地方引用一下。
public function getDefinitionByName(name:String):Object
返回 参数
引发
示例
以下示例使用
GetDefinitionByNameExample 类在舞台上创建一个橙色的正方形。这是使用以下步骤完成的:
package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.utils.getDefinitionByName; public class GetDefinitionByNameExample extends Sprite { private var bgColor:uint = 0xFFCC00; private var size:uint = 80; public function GetDefinitionByNameExample() { var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class; var instance:Object = new ClassReference(); instance.graphics.beginFill(bgColor); instance.graphics.drawRect(0, 0, size, size); instance.graphics.endFill(); addChild(DisplayObject(instance)); } } } 原文地址:http://topmanopensource.javaeye.com/blog/437508 |
Flex 中用类名反射出类实例(getDefinitionByName)
【转】Flex 中用类名反射出类实例(getDefinitionByName)
2009年11月17日 星期二 14:55