2010-04-22 119 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屬性,這將給你爲每個屬性名