`
longgangbai
  • 浏览: 7332469 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

flex中getDefinitionByName 函数的使用

阅读更多

  在项目中自定义一个CheckboxGroup,这个控件里面包含多个Checkbox想控制Checkbox的行为:所以使用查找一下帮助使用flex中经典方法:getDefinitionByName 函数的使用

 

 

public function getDefinitionByName(name:String):Object
返回参数 name 中指定的类引用

参数 name:String - 类名称
返回 Object - 返回参数 name 中指定的类引用
错误 ReferenceError - 找不到参数 name 对应的公共定义

as3中的getDefinitionByName函数是 返回 name 参数指定的类的类对象引用。

这样就可以使用这个方法根据已知类的路径的字符串来获取类的类对象引用。这样就可以利用这个特性让flash动态创建类的实例...

 

但问题是:

1. 使用getDefinitionByName方法获得的类必须是在发布的时候被编译到swf文中的,否则就会报错:"ReferenceError: Error #1065: 变量 <类的名字> 未定义。"

2. 由于使用import导入的类(只是作为查找类的路径)并不会在发布swf的时候被编译进去(当然flash.*包里面的类本身就是player中的),只用在代码中使用到的类才会被编译进去...

 

那么,要使用这个方法来实现动态执行怎么办? 只有把可能需要的所有类包含在代码中(比如在定义变量的类型声名时使用 *),并且在开始声名此类,声名时可以随便使用个名字,这样才能使用getDefinitionByName方法...
实际上getDefinitionByName所获得的类名就是前面你所做的声名的名字引用

 

-------------------------------------------------
import com.ooph.parser.*;
//包内有ParserWeb类
var ss:ParserWeb;
//在此处声名ParserWeb类,名为ss(名字不用与下面实例名的相同)
var sortStr:String="Web";
var P:Class = getDefinitionByName("com.ooph.parser.Parser"+sortStr) as Class;
//注意这里要写完整的类路径 "com.ooph.parser.Parser"+sortStr
var newParser:* = new P();

 

 

 

 

 

getDefinitionByName(name) 返回 name 参数指定的类的类对象引用。
经过测试只能获取内置的类,不能获取自定类,怎么解决呀??

其实最终问题是,知道类名,但是为字符串,如何获取它?因为数量不定放在XML中配置的。

 

因为内置类库肯定会被编译到swf里,这样反射就能拿到。而自定义的类,如果整个工程里都没有用到,即使import也不会被编译(不然swf里的垃圾成分太多)。我建议可以把需要反射的类库生成一个swf去载入,或者在工程的什么地方引用一下。

 

 

getDefinitionByName () 函数  
public function getDefinitionByName(name:String):Object

 

语言版本 :  ActionScript 3.0
RuntimeVersions:  AIR 1.0, Flash Player 9

 

 

返回 name 参数指定的类的类对象引用。

参数

  name:String — 类的名称。

 

返回
  Object — 返回 name 参数指定的类的类对象引用。

引发
  ReferenceError — 不存在具有指定名称的公共定义。

示例

以下示例使用 GetDefinitionByNameExample 类在舞台上创建一个橙色的正方形。这是使用以下步骤完成的:
  1. 声明代表橙色背景颜色和 80 像素大小的变量,这些变量稍后将用于绘制正方形。
  2. 在构造函数内,将 Class 类型的变量 ClassReference 赋予 Sprite。
  3. 对名为 instance 的 ClassReference 的实例进行实例化。
  4. 由于 instance 按引用是 Sprite 对象,因此可以使用可用于 Sprite 的方法绘制正方形并将其添加到显示列表。
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));
        }
    }
}
分享到:
评论
1 楼 qiyangyang09 2010-10-13  
我想用这种方法动态创建方法。不知道能否够解决。
比如:
我传递过来
类名字:
var classStr:String="People";
方法名字:
var funcStr:String="sayHello";
sayHello方法的参数为:
var arr:Array=new Array(12,5551,"Hi,你好!");

private function callFunction(classStr,funcStr,arr):void{
  ........?这块怎么写。
}
qiyy@winnerinf.com

相关推荐

    flex解析json的swc包(entity-flex-v1-02)及例子

    SWC包“entity-flex-v1-02”可能是专门为了解析和操作JSON对象而设计的,这可能包含了一些优化的函数和类,使得在Flex中处理JSON更加高效和便捷。 “Examples”目录很可能包含了使用这个SWC包的示例代码。通过查看...

    Flex控制SWF播放

    在本文中,我们将深入探讨如何使用Flex来控制SWF(Shockwave Flash)文件的播放。Flex是一种基于ActionScript 3的开源框架,主要用于构建富互联网应用程序(RIA)。它提供了丰富的用户界面组件和强大的数据绑定机制...

    Flex应用程序中嵌入各种类型的资源方法 源码

    本资料主要聚焦于在Flex中如何嵌入和管理这些资源,以提高应用程序的性能和用户体验。下面将详细阐述相关知识点。 1. **资源类型**: - 文本:包括静态文本和动态文本,可以是常量、XML、JSON等数据。 - 图像:如...

    Flex 开发类的反射

    除了基本的反射使用外,Flex还支持更复杂的场景,如在Module和RSL(Runtime Shared Library)中使用反射。Module允许在应用程序运行时动态加载和卸载组件,而RSL则提供了按需加载库的功能,两者都涉及到了动态加载类...

    Flex启动与初始化

    SystemManager 的 application:IUIComponent 属性引用载入 Flex 项目的 application 实例,getDefinitionByName(name:String):Object 方法获取载入 swf 中的定义,例如 Object(SystemManager(mySwfLoader.content)....

    Flex 反射示例

    在Flex中,ActionScript 3.0提供了反射API,主要由`flash.utils`包下的`getQualifiedClassName`、`getQualifiedSuperclassName`、`getDefinitionByName`、`describeType`等函数组成。 2. **核心API**: - `...

    flex动态菜单(Menubar)

    本篇将详细讲解如何利用Flex中的Menubar组件和XML配置来实现动态菜单,并在itemClick事件中处理次级子菜单。 1. **Menubar组件**:Flex的Menubar组件是一个顶部菜单条,它包含一组下拉式菜单项。每个菜单项都可以...

    Use-AS-self.zip_flex

    通过`flash.utils.getDefinitionByName`函数,我们可以动态获取SWF中的类定义,进一步分析和执行其中的代码。对于复杂的ActionScript项目,理解其执行流程和数据结构是关键。 总的来说,理解和解析SWF文件格式需要...

    调用swf中导出的类,按钮,MC,图片等

    在Flash Professional或Flex Builder中,可以为AS3类选择“Export for ActionScript”选项,这样在编译后的SWF中,该类就会成为一个可访问的符号。一旦类被导出,我们可以通过`Loader`类来加载SWF,并使用`...

    第四节 反射的方式加载库里的MC.docx

    首先,我们要理解在AS3中,`getDefinitionByName()`函数是实现反射的关键。这个函数接受一个字符串参数,该参数是类的全名(包括包名),并返回对应的Class对象。如果我们有一个类名为`Mc1`的元件,我们可以通过以下...

    flash actionscript3游戏开发之 1个swf加载另1个swf并调用其中的元件类.rar

    要实例化这些类,我们需要知道它们的类名,然后使用`getDefinitionByName()`函数获取类定义: ```actionscript var className:String = "com.example.MyClass"; var classDefinition:Object = getDefinitionByName...

    FLASH AS3.0 WINDOWS 菜单

    在Flash AS3.0中实现这个XML驱动的菜单系统,开发者会使用`flash.utils.getDefinitionByName()`方法来根据XML中的`action`值找到相应的函数,并使用`flash.events.EventDispatcher`来监听和处理用户的点击事件。...

    关于As3反射的问题

    1. **Class 类**:`flash.utils.getDefinitionByName()` 方法是AS3中获取类信息的关键。它接受一个字符串参数,该参数是类的完全限定名(例如,“package.ClassName”),然后返回对应的Class对象。这个Class对象...

    as3反射和将XML转换成对象的类

    例如,你可以使用`flash.utils.describeType()`函数来获取一个类的详细描述,并将这些信息存储在`ClassInfo`实例中。 `XMLConverter.as` 文件可能包含了一个类,该类专门用于将XML数据转换为AS3的对象。在AS3中,...

    网页给swf传递参数的方式【可以用于版本管理】

    在SWF内部,可以使用`flash.system.ApplicationDomain.currentDomain.getDefinitionByName()`或`flash.net.URLVariables.decodeURIComponent()`来访问这些参数。 2. **使用JavaScript通信**: 另一种方法是利用...

    flash ActionScript.3小技巧

    在 trace 函数中使用多个参数 ActionScript 3 的 `trace()` 函数支持同时输出多个参数,这对于调试多个变量非常方便: ```actionscript trace(value1, value2, value3); ``` 而在 AS1 和 AS2 中,需要将多个值...

    as3场景中MC复制一个或多个

    说明:这个是用来实现已在场景中的Mc复制多个出来,如AS2中可以duplicateMovieClip,AS3中用是用New和addChild的, 有人会说As3可以用  方法1——反射方法: var ClassRef:Class = getDefinitionByName...

    as代码

    使用`getDefinitionByName`函数动态实例化类: ```as var linkName:String = "BigPhoto"; var cla:Class = getDefinitionByName(linkName); var bitmapdata:BitmapData = new cla(50, 50); var img:Bitmap = new ...

    flash资源加载策略

    通过Loader.contentLoaderInfo.applicationDomain.getDefinition()或getDefinitionByName()方法,可以在运行时获取并实例化这些资源。这种方式加载速度快,管理方便,尤其适合UI皮肤和即时显示的图标。然而,它要求...

Global site tag (gtag.js) - Google Analytics