2010-04-22 61 views
1

我有我创建循环通过对象属性名称在ActionScript

public dynamic class SiteZoneFileUploadVO 
{  
    public var destination:String = "sitezone"; 
    public var siteZoneId:uint; 
    public var fileType:String; 
    public var fileContents:String; 

    public function SiteZoneFileUploadVO() 
    { 
    } 

} 

当我尝试遍历这个对象的属性名称只迭代动态添加的属性动态类。

 parameters.dynVar= "value"; 

     for(var name:String in parameters) 
     { 
      trace(name); 
     } 

即使对象具有所有相等的值(IVE在调试器中检查这一点)的唯一属性名将被追查是dynVar属性。

如何遍历所有属性名称而不仅仅是动态添加的属性?

+0

对不起你们一个字符串,我措辞的问题是错误的。我正在寻找迭代属性名称,而不是属性中的值。 – asawilliams 2010-04-22 22:19:47

回答

4

您可以使用describeType()来获取包含您的类的所有方法和变量的XML,然后过滤出要迭代的属性(例如所有变量)并将它们存储在XMLList中。

作为下一步,您将遍历XMLList并在对象上使用方括号表示法以按名称访问过滤的属性。但是,您只能以这种方式访问​​公共属性,因为describeType()不会查看私有属性。

+1

Baelnom说得很对 - 你无法用for(var name in parameters)迭代动态和静态属性 - 只能遍历动态属性。 – sksizer 2010-04-23 02:33:21

0

只是使用trace(ObjectUtil.toString(parameters));这应该给你你的整个对象。

+0

虽然可以使用ObjectUtil.toString()来打印出对象的所有属性,但它可以在单个字符串中执行。这使得它不适合访问单个属性,基本上完全排除了任何循环。 – Baelnorn 2010-04-22 22:15:40

+0

@Belnorn - 同意,这是一个丑陋的,丑陋的转储,但当你需要的时候就很有用。我太多地剔除了这个问题,没有意识到OP正在寻找的不仅仅是转储 – invertedSpear 2010-04-22 22:20:30

3

如果您运行的柔性:

看了几个帖子,ObjectUtil.toString是最有前途的,然后看着柔性源代码,它使用另一种方法ObjectUtil.getClassInfo这正是你需要的。如果你只是想属性名称:

ObjectUtil.getClassInfo(myClass).properties 

返回的QName对象的数组,每个人都有一个localName属性,这将给你为每个属性名