Apache flex Flex/Flash是否有列出所有UIComponent的API?

Apache flex Flex/Flash是否有列出所有UIComponent的API?,apache-flex,air,Apache Flex,Air,我正在尝试使用AdobeAIR创建一个API实用程序,其中给定一个组件名称,它应该列出该组件的所有it方法、变量和其他属性 但是我找不到一个API来列出Flex/Flash的所有组件 是否有用于查找所有UIComponent的API,或者如果没有此类API,有人能告诉我如何查找组件吗 注意:我尝试过使用flash.utils.describeType(),但它不能满足我的要求,因为该方法的输入是使用TextInput动态传递的 ~Jegan除了显示数据之外,您还需要对数据执行任何操作吗?如果没有

我正在尝试使用AdobeAIR创建一个API实用程序,其中给定一个组件名称,它应该列出该组件的所有it方法、变量和其他属性

但是我找不到一个API来列出Flex/Flash的所有组件

是否有用于查找所有UIComponent的API,或者如果没有此类API,有人能告诉我如何查找组件吗

注意:我尝试过使用flash.utils.describeType(),但它不能满足我的要求,因为该方法的输入是使用TextInput动态传递的


~Jegan

除了显示数据之外,您还需要对数据执行任何操作吗?如果没有,从Adobe的在线API文档中调出正确的页面可能是最容易的。

听起来你在问两件事:

  • 如何列出UIComponent的所有属性/方法
  • 如何列出FlexSDK中的所有UIComponents
  • 第一个可以使用
    descripbetype()
    完成。假设该方法是使用TextInput动态传递的,那么只需将所有UIComponents包含到SWF中即可。对于SDK中的每个组件,您可以使用以下
    include
    语句来实现这一点(此示例使用按钮):

    包括mx.controls.Button;按钮

    然后你可以这样做:

    var className:String = myTextArea.text; // mx.controls::Button or mx.controls.Button
    var clazz:Class = flash.utils.getDefinitionByName(className);
    var methods:Array = getMethods(clazz);
    var properties:Array = getProperties(clazz); // write a similar method for accessors and variables
    
    /**
     *  Returns a list of methods for the class.
     * Pass in the superclass depth for how many classes
     * you want this to return (class tree).  If it's -1, it will return the whole method list
     */
    public static function getMethods(target:Object, superclassDepth:int = -1, keepGeneratedMethods:Boolean = false):Array
    {
     var description:XML = DescribeTypeCache.describeType(target).typeDescription;
     var hierarchy:Array = getHierarchy(target);
     var methodList:XMLList = description..method;
     methodList += description.factory..method; // factory is required if target is Class
     var methodName:String
     var methods:Array = [];
     var declaredBy:String;
     var methodXML:XML;
     var i:int = 0;
     var n:int = methodList.length();
     for (i; i < n; i++)
     {
      methodXML = methodList[i];
      declaredBy = methodXML.@declaredBy;
      methodName = methodXML.@name;
      // we break because the xml list is orded hierarchically by class!
      if (superclassDepth != -1 && hierarchy.indexOf(declaredBy) >= superclassDepth)
       break;
      // ignore methods that start with underscore:
      if (methodName.charAt(0) == "_" && !keepGeneratedMethods)
       continue;
      methods.push(methodName);
     }
     // sort the method list, so there's some kind of order to the report:
     methods.sort(Array.CASEINSENSITIVE);
     return methods;
    }
    
    var className:String=myTextArea.text;//mx.controls::Button或mx.controls.Button
    var clazz:Class=flash.utils.getDefinitionByName(className);
    var方法:Array=getMethods(clazz);
    变量属性:数组=getProperties(clazz);//为访问器和变量编写类似的方法
    /**
    *返回类的方法列表。
    *传递多少类的超类深度
    *您希望它返回(类树)。如果是-1,它将返回整个方法列表
    */
    公共静态函数getMethods(目标:对象,超类深度:int=-1,keepGeneratedMethods:Boolean=false):数组
    {
    变量描述:XML=DescripteTypeCache.DescripteType(目标).typeDescription;
    变量层次:数组=getHierarchy(目标);
    var methodList:XMLList=description..method;
    methodList+=description.factory..method;//如果目标是类,则需要工厂
    var methodName:String
    var方法:Array=[];
    var declaredBy:字符串;
    var-methodXML:XML;
    变量i:int=0;
    var n:int=methodList.length();
    对于(i;i=超类深度)
    打破
    //忽略以下划线开头的方法:
    if(methodName.charAt(0)=“\ux”&&&!keepGeneratedMethods)
    继续;
    方法:push(methodName);
    }
    //对方法列表进行排序,以便报告具有某种顺序:
    方法.排序(数组.不区分大小写);
    返回方法;
    }
    
    第二个是列出SDK中的UIComponents,这有点复杂,因为SDK中没有稳定的组件列表(取决于版本等)。但是,您可以得到swf中包含的每个类的列表。您可以通过生成一个(用于帮助模块)来完成此操作,它只是一个编译器参数:

    -link report=my_report.xml

    然后,您可以找到一种方法来查找该文件中唯一的xml节点,以及哪些节点扩展了UIComponent。我使用ruby和。还有一个整洁的房间

    如果您正在执行第一种情况,那么该方法应该可以让您开始列出UIComponent的所有属性/方法。如果您正在执行第二个操作,那么将提供swf中包含的所有UIComponents的列表

    如果有帮助,请告诉我,
    Lance

    当我在TextArea控件中输入“按钮”时,上述代码对我无效。我收到的错误消息是“ReferenceError:error#1065:Variable Button未定义”。如果我有任何错误,请告诉我。请保存一些导入:
    import mx.controls.*
    该引用错误是因为swf中未包含该按钮。使用
    import mx.controls.*单独导入它不会将其包含在swf中。您需要为它创建一个变量:
    public var uselessButtonVariable:Button
    ,或者执行上面显示的导入操作:
    导入mx.controls.Button;按钮。尝试一下,它应该可以工作。下面是flex sdk使用的“导入”类的一个示例: