Звучит так, будто вы спрашиваете две вещи:
- Как перечислить все свойства / методы UIComponent.
- Как составить список всех компонентов UIC в Flex SDK.
Первый можно сделать с помощью describeType()
. Учитывая, что метод передается динамически с использованием TextInput , вам нужно просто включить все компоненты UIComponents в SWF. Это можно сделать с помощью следующего оператора include
для каждого компонента в SDK (этот пример с кнопкой):
include mx.controls.Button; 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;
}
Второй, перечисляющий UIComponents в SDK, немного сложнее, поскольку в SDK нет стабильного списка компонентов (зависит от версии и т. Д.). Однако то, что вы можете сделать, это получить список всех классов, включенных в SWF. Вы делаете это, генерируя Link Report (который используется для помощи модулям), который является просто аргументом компилятора:
-link-report=my_report.xml
Затем вы можете найти способ найти уникальные узлы xml в этом файле и какие из них расширяют UIComponent. Для этого я использую ruby и анализатор nokogiri xml для ruby . Существует также удобное приложение AIR для визуализации отчета о ссылках .
Если вы делаете первый случай, этот метод должен помочь вам начать перечисление всех свойств / методов UIComponent. Если вы делаете второе, это даст вам список всех компонентов UIC, включенных в SWF.
Дайте мне знать, если это поможет,
Lance