2009-06-24 65 views
15

有人能告诉我如何识别flex中对象的类型吗?特别是我有一个数组,我在其中存储多个类型(但所有UIComponents),现在评估数组我想知道我是否有TextInput控件或RadioButton。有人有想法吗?获取flex中的类型

在此先感谢

+0

只是做了它的方式“是”:var b:Boolean = arr [i]是TextInput,这是否是唯一的方法? – 2009-06-24 09:14:35

+0

ObjectUtil.getClassInfo( – cloverink 2009-10-29 04:26:25

回答

18

您可以针对特定类的测试使用“是”经营者或者您可以使用flash.utils.getQualifiedClassName()(你传递你的对象) - 将返回的字符串完全合格的类名称。

+0

)是的 - getQualifiedClassName()。它可以方便地使用多次 – 2009-06-24 12:15:49

1

is运算符测试类型兼容性,是的。从文档,is

...计算对象是否是 与特定的数据类型, 类或接口兼容。使用is 运算符而不是instanceof 运算符进行类型比较。您也可以使用 运算符is检查 对象是否实现了接口 。此类别中

其他有用的操作符是typeof(返回原始的字符串表示),instanceof(类似于is,但忽略接口兼容性)和as。一个伟大而完整的ActionScript运算列表is available here

希望它有帮助!

3

运算符“是”代表一个选项。

然后有运营商instanceof,根据情况可能会或可能不会有用。

此外,还有ObjectUtil类与静态方法getClassInfo。这个返回的不仅仅是对象的类名。

运算符“typeof”不幸的是对类没有用处。

而且,正如布兰登霍尔已经建议的那样,flash.utils.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); 
} 
0

最好的办法是使用“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 

没有为你想要的对象是特定的类(而不是一个子类)的成员的情况下另外一个选择:你可以使用该对象的constructor属性和使用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; 

    } 
} 
3

尝试使用“className”属性。

它应该返回 “的TextInput” 或 “按钮” 视情况

for each (var item:* in myArray) 
{ 
    if(item.hasProperty('className')) 
    { 
     trace("item ["+i+"] is :" + item['className']); 
    } 
} 
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; 
    }