Получить тип в flex

может кто-нибудь сказать мне, как я могу определить тип объекта в flex? В частности, у меня есть массив, в котором я храню несколько типов (но все UIComponents) сейчас, когда я оцениваю массив, который я хочу узнать, есть ли у меня TextInput Control или RadioButton. У кого-то есть идея?

Заранее спасибо

Ответы

Ответ 1

Вы можете либо протестировать конкретный класс с помощью оператора "is", либо вы можете использовать flash.utils.getQualifiedClassName() (вы передаете ему свой объект) - который вернет строку с полным именем класса.

Ответ 2

ЕГО РАБОТА:)

Ниже приводится способ решения этой проблемы

switch( true )
   {
    case item is Customer_SF:
     c = item as Customer_SF;
     break;

    case item is Opportunity:
     o = item as Opportunity; 
     break;

    case item is Product:
     o = ( item as Product )._opportunity;
     break;
    default:
     return true;
   }

Ответ 3

Оператор "есть" представляет собой один вариант.

Тогда существует оператор instanceof, который может или не может быть полезен в зависимости от ситуации.

Также существует класс ObjectUtil со статическим методом getClassInfo. Это возвращает больше, чем просто имя класса объекта.

Оператор "typeof", к сожалению, бесполезен для классов.

И, как уже сказал Бранден Холл, flash.utils.getQualifiedClassName().

Ответ 4

Попробуйте использовать свойство className.

Он должен возвращать "TextInput" или "Button" в зависимости от случая

for each (var item:* in myArray)
{
    if(item.hasProperty('className'))
    {
        trace("item ["+i+"] is :" + item['className']);
    }
}

Ответ 5

вот какой-то простой псевдокод, который демонстрирует, как использовать оператор is для того, что вы хотите сделать:

for each (var item:* in myArray)
{
    if (item is TextInput)
        doSomethingWithTextInput(item as TextInput);
    else if (item is RadioButton)
        doSomethingWithRadioButton(item as RadioButton);
}

Ответ 6

Эксплуатационные тесты is для совместимости типов да. Из документов is:

... оценивает, является ли объект совместимый с конкретным типом данных, класса или интерфейса. Используйте isвместо instanceofоператора для сравнения типов. Ты можешь также используйте оператор is для проверки реализует ли объект интерфейс.

Другими полезными операторами в этой категории являются typeof (который возвращает строковое представление примитива), instanceof (аналогично is, но игнорирует совместимость с интерфейсом) и as. Здесь доступен полный и полный список операторов ActionScript .

Надеюсь, что это поможет!

Ответ 7

Лучше всего использовать оператор "is" и использовать что-то вроде:

for( var i:int = 0; i < componentArr.length; i++ )
{
    var comp:UIComponent = componentArr[ i ];
    if( comp is DataGrid )
        // Handle DataGrid functionality here.
    else if (comp is DropDown )
        // Handle DropDown here
}

Однако существует одна проблема с этим подходом. Поскольку "is" вернет true для всех классов потомков, вы должны поместить все классы потомков перед своими предками. Список должен появиться перед ListBase. Это может вызвать некоторые неприятности.

// This is important to remember:
var mc:MovieClip = new MovieClip();
trace( mc is Sprite ); // true

Существует еще одна опция для случаев, когда объекты должны быть членами определенного класса (а не класса потомков): вы можете использовать свойство конструктора объекта и использовать оператор switch.

for( var i:int = 0; i < componentArr.length; i++ )
{
    var klass:Class = componentArr[ i ].constructor;

    switch( klass )
    {
        case DataGrid:
            // Handle DataGrid
            break;
        case Text:
            // Handle Text
            break;
        case NumericStepper:
             // Handle NumericStepper
            break;
        default:
             // Handle default
            break;

    }
}