Apache flex Flex/Flash是否有列出所有UIComponent的API?
我正在尝试使用AdobeAIR创建一个API实用程序,其中给定一个组件名称,它应该列出该组件的所有it方法、变量和其他属性 但是我找不到一个API来列出Flex/Flash的所有组件 是否有用于查找所有UIComponent的API,或者如果没有此类API,有人能告诉我如何查找组件吗 注意:我尝试过使用flash.utils.describeType(),但它不能满足我的要求,因为该方法的输入是使用TextInput动态传递的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除了显示数据之外,您还需要对数据执行任何操作吗?如果没有
~Jegan除了显示数据之外,您还需要对数据执行任何操作吗?如果没有,从Adobe的在线API文档中调出正确的页面可能是最容易的。听起来你在问两件事:
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使用的“导入”类的一个示例: