www.51flex.net
好东西大家一起分享 只说技术不拉家常
一般谈到反射 都是对class 进行反射
flex 的component  的表现形式似乎不像我们正常见到的类 

public class classname{
} 此类

但是依然可以使用反射

首先如何使用反射
flex 提供一个utils
具体位置flash.utils.getDefinitionByName
getDefinitionByName () function  
public function getDefinitionByName(name:String):Object

详细咨询请看帮助

假设你自己创建的component  路径为    component.mycanvas

使用方法如下
var optionClass:Object = getDefinitionByName("component.mycanvas"as Object;
                    var optionCanvas:Canvas 
= new optionClass() as Canvas;
                    var iComponentOption:IComponentOption 
= IComponentOption(optionCanvas);
注意getDefinitionByName(name:String)  中的name 要用完整的路径 不然不认得

对于实际应用的时候我建议声明一个接口 让你的组件都继承一个公开的接口  可以让外部容易使用(今天不多讨论)

然后编译 运行   哈哈哈  告诉你不成功 会出错的 提示你component.mycanvas没有定义


其实flex挺怪的  但是我大概知道什么原因 就是当某一个class 或者 component 没有被系统中任何东西使用
则flex编译的时候是不会把这个东西编译进去的 在运行的时候 flex是不会帮你编译代码的

所以就造成了  没有定义的错误

怎么办  很简单  让有一个东西使用它呗 
只要随便一个地方 写上 private var xx:mycanvas;
大功告成   其实这样反射的意义就没有了  如果我动态添加功能 还要去进程中申明一下 吐血啊







posted on 2007-07-27 00:03  aixia  阅读(8021)  评论(3编辑  收藏  举报