有人能告诉我如何识别flex中对象的类型吗?特别是我有一个数组,我在其中存储多个类型(但所有UIComponents),现在评估数组我想知道我是否有TextInput控件或RadioButton。有人有想法吗?获取flex中的类型
在此先感谢
有人能告诉我如何识别flex中对象的类型吗?特别是我有一个数组,我在其中存储多个类型(但所有UIComponents),现在评估数组我想知道我是否有TextInput控件或RadioButton。有人有想法吗?获取flex中的类型
在此先感谢
您可以针对特定类的测试使用“是”经营者或者您可以使用flash.utils.getQualifiedClassName()(你传递你的对象) - 将返回的字符串完全合格的类名称。
)是的 - getQualifiedClassName()。它可以方便地使用多次 – 2009-06-24 12:15:49
is
运算符测试类型兼容性,是的。从文档,is
:
...计算对象是否是 与特定的数据类型, 类或接口兼容。使用
is
运算符而不是instanceof
运算符进行类型比较。您也可以使用 运算符is
检查 对象是否实现了接口 。此类别中
其他有用的操作符是typeof
(返回原始的字符串表示),instanceof
(类似于is
,但忽略接口兼容性)和as
。一个伟大而完整的ActionScript运算列表is available here。
希望它有帮助!
运算符“是”代表一个选项。
然后有运营商instanceof,根据情况可能会或可能不会有用。
此外,还有ObjectUtil类与静态方法getClassInfo。这个返回的不仅仅是对象的类名。
运算符“typeof”不幸的是对类没有用处。
而且,正如布兰登霍尔已经建议的那样,flash.utils.getQualifiedClassName()。
这里有一些简单的伪代码演示了如何你想要做什么用的is
运营商:
for each (var item:* in myArray)
{
if (item is TextInput)
doSomethingWithTextInput(item as TextInput);
else if (item is RadioButton)
doSomethingWithRadioButton(item as RadioButton);
}
最好的办法是使用“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;
}
}
尝试使用“className”属性。
它应该返回 “的TextInput” 或 “按钮” 视情况
for each (var item:* in myArray)
{
if(item.hasProperty('className'))
{
trace("item ["+i+"] is :" + item['className']);
}
}
其工作:)
以下是我解决了这个问题
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;
}
只是做了它的方式“是”:var b:Boolean = arr [i]是TextInput,这是否是唯一的方法? – 2009-06-24 09:14:35
ObjectUtil.getClassInfo( – cloverink 2009-10-29 04:26:25