Вопрос по – Получить тип в flex

15

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

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

только что сделал это с & quot; is & quot ;: var b: Boolean = arr [i] is TextInput, это единственный и лучший способ сделать это? Sebastian Müller
ObjectUtil.getClassInfo ( cloverink

Ваш Ответ

6   ответов
1

is операторские тесты на совместимость типов, да. Из документов,is:

... evaluates whether an object is compatible with a specific data type, class, or interface. Use the is operator instead of the instanceof operator for type comparisons. You can also use the is operator to check whether an object implements an interface.

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

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

4

Вот как я решил эту проблему

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

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

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

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

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

18

is & quot; оператор или вы можете использовать flash.utils.getQualifiedClassName () (вы передаете ему свой объект) - который вернет строку полного имени класса.

Ах да - getQualifiedClassName (). Это пригодится больше, чем несколько раз.
2

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

for each (var item:* in myArray)
{
    if (item is TextInput)
        doSomethingWithTextInput(item as TextInput);
    else if (item is RadioButton)
        doSomethingWithRadioButton(item as RadioButton);
}
Вы можете использовать Object вместо *, если вы не ожидаете пространства имен и других сумасшедших предметов в вашем массиве.
Хороший вопрос, я просто пытался сделать его максимально гибким. Фактически, если вы знаете, что у вас будут только UIComponents или DisplayObjects, то вы можете использовать это.
3

Он должен возвращать & quot; TextInput & quot; или & quot; Кнопка & quot; в зависимости от случая

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

Похожие вопросы