2011-03-03 97 views
0

基於存儲在數據庫中的XML模板,我動態創建UI組件通過UIComponent類的孩子穿越。現在我要訪問此UIComponent類的子組件之一。我在這堂課沒有看到任何兒童財產?我怎麼可能通過這個類的每個孩子comppnent遍歷並根據代碼中的一些邏輯(我不能在模板本身做的),設置其屬性。我怎麼能在柔性

基本上就是我想要做的是這樣的:

var cover:UICoomponent = generateScreen() 
for each(var obj:UIComponent in cover.children){ 
if (obj.id =="myComponent"){ 
obj.SomProperty = "SomeValue"; 
} 
} 

任何幫助將不勝感激。謝謝。

回答

3

使用numChildren

var cover:UICoomponent = generateScreen() 
for (var i:int = 0; i < cover.numChildren; i++) 
{ 
    var obj:UIComposer = cover.getChildAt(i) as UIComponent; 
    if (obj.id =="myComponent") { 
     obj.SomProperty = "SomeValue"; 
    } 
} 

更新:遞歸遍歷

function findChild(childId:String,container:DisplayObjectContainer=null):UIComponent 
{ 
    container ||= this; 
    for (var i:int = 0; i < container.numChildren; i++) 
    { 
     var obj:UIComponent = container.getChildAt(i) as UIComponent; 
     if (obj.id == childId) 
     return obj; 
     if (obj is DisplayObjectContainer) 
     { 
     // search for children 
     child = findChild(childId,obj as DispalyObjectContainer); 
     if (child) 
      return child; 
     } 
    } 
} 

用法:

var child:UIComponent = findChild("myComponent"); 
child.someProperty="SomeValue"; 

我還沒有編譯這一點 - 但你的總體思路。

+0

這隻似乎找到了以下的兒童一平不是所有的遞歸孩子(這可能是有道理的,因爲UI組件的XML模式)...我是什麼興趣知道的是 - 有沒有方法或方式,其中我能找到的所有兒童(遞歸遍歷)不管他們是在什麼水平。謝謝。 – Tintin

+0

已更新後顯示遞歸示例 –

+0

謝謝......我看到你在做什麼......會給它一個鏡頭......但我已經通過將它設置爲單例類並直接從屬性中的某處設置屬性來解決了問題代碼(在那裏我曾希望以嵌入此邏輯)...但是這看起來很有趣,我會試試看。再次感謝。 – Tintin