Есть ли API от Flex / Flash для перечисления всего UIComponent? - PullRequest
0 голосов
/ 17 февраля 2010

Я пытаюсь создать утилиту API, используя Adobe AIR, где с указанием имени компонента в нем должны быть перечислены все методы, переменные и другие свойства этого компонента.

Но я не смог найти API для отображениявсе UIComponents Flex / Flash.

есть ли API для поиска всего UIComponent или, если такого API нет, кто-нибудь может сказать мне, как мне искать компоненты?

Примечание:Я попытался использовать flash.utils.describeType (), но он не может удовлетворить мои требования, поскольку входные данные для метода передаются динамически с использованием TextInput.

~ Jegan

Ответы [ 2 ]

1 голос
/ 17 февраля 2010

Звучит так, будто вы спрашиваете две вещи:

  1. Как перечислить все свойства / методы UIComponent.
  2. Как составить список всех компонентов 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

0 голосов
/ 17 февраля 2010

Вам нужно что-то делать с данными, кроме их отображения? Если нет, то, возможно, проще всего найти нужную страницу в онлайн-документации Adobe по API.

...