2011-09-22 130 views
1

我試圖在FlashBuilder的舞臺上獲取7個TextAreas,它們全都具有「Desc1」,「Desc2」,「Desc3」.. 。和名稱相同的「DESC1」,「DESC2」,「Desc3」 ......,但是當我設法得到它,我得到一個空對象的錯誤...在舞臺上獲取TextArea(通過ID,名稱獲取的getChild)

for(var i:int = 0;i<7;i++) 
{ 
    trace((stage.getChildByName("Desc"+(i+1))as TextArea).x); 
} 

我搜索該網站並沒有找到任何「getChildByID」的方法

+0

追蹤「stage.numChildren」 - 你看到了多少物品?賠率是,你的TextAreas不是你舞臺的直接子女,而是嵌套在另一個對象中。 getChildByName不會執行對舞臺下所有兒童的深層搜索。 – meddlingwithfire

回答

0

Flex ID不適用於getChildByName()。 getChildByName()被設計爲與Adobe Flash CS中的嵌套元素的ID一起使用。

flex id是一個類名稱與id相等的類成員的顯式聲明。 由於actionscript語言中缺少宏,因此無法自動創建此類控件列表。

您可以手動創建一個Vector或文本區域的陣列,並用它在你的代碼的其他部分,在你的文字區域自動重複:

var text_areas:Vector.<TextArea> = new Vector.<TextArea>(); 
text_areas.push(Desc1, Desc2, Desc3); 
// or you can do this 
var text_areas2:Array = []; 
text_areas["Desc1"] = Desc1; 
text_areas["Desc2"] = Desc2; 
text_areas["Desc3"] = Desc3; 
// Now you can iterate over the text areas 
for each (var a_text_area:TextArea in text_areas) 
{ 
    .... 
} 

或者你可以創建一個柔性陣列:

<fx:Array id="textAreas"> 
    <s:TextArea id="textArea1"/> 
    <s:TextArea id="textArea2" x="397" y="0"/> 
    <s:TextArea id="textArea3" x="201" y="1"/> 
</fx:Array>