2012-10-25 173 views
0

我使用Flex 4.6,有一個AIR應用程序getElementByName似乎不工作

我一張有許多標籤的面板。我需要從另一個班級訪問這些標籤。 我不想傳遞所有的標籤對象。所以我想通過面板容器,然後通過getElementByName()方法訪問標籤。

這裏是我的標記:

<s:VGroup includeIn="SLA_textView" width="100%" height="100%" 
paddingBottom="10" paddingRight="10"> 
<s:Panel id="SlaTextViewPanel" width="100%" height="100%" 
title="test View"> 
    <s:Label id="lbTotalBooks" name="test" x="82" y="62" /> 
</s:Panel> 
</s:VGroup> 

ActionScript代碼如下所示:

getLabels(Container:Panel){ 
    var _Container:Panel = Container; 

//var tempLabel:Label = _Container.getChildByName("test") as Label; 

var n:int = _Container.numChildren; 
    for (var i:int = 0; i < n; i++) { 
    var c:DisplayObject = _Container.getChildAt(i); 
    trace(c.name); 
} 

var tempLabel:Label = _Container.getChildByName("test") as Label; 

爲什麼tempLabel總是null

所以我試圖循環通過面板上的對象的名稱和測試標籤甚至不顯示?所以我在某個地方出了問題。

跟蹤:

instance1333 
PanelSkin1074 
+1

你不應該使用像'getChild)與Spark容器的方法(',因爲這個標籤是不是該小組的直接子幕後;你應該使用'getElement()'等。 'name'也是Flash API的遺物。無論如何你爲什麼需要這個?我想不出任何理由。 – RIAstar

+0

我有什麼是從C#返回一個表的Web服務。返回監聽器在類中。所以我需要等待Web服務中的事件完成,然後才能使用數據填充標籤。我不確定是否有更好的方法?我正在尋找另一種管理方式。我將調用移到該類中以使代碼簡單。不知道這一切是否有意義 – Mike

回答

0

何時何地你叫一個getLabels方法?標籤可能已經創建,但尚未初始化。

+0

是的,這是它....謝謝 – Mike

0

您可以使用這樣的事情:

var element:Group = "searchId" in this ? this["searchId"] as Group : null;