【问题标题】:how could I traverse through children of a UIComponent Class in flex我如何在 flex 中遍历 UIComponent 类的子级
【发布时间】:2011-03-03 21:39:50
【问题描述】:

我正在基于存储在数据库中的 XML 模板动态创建 UI 组件。现在我想访问这个 UIComponent 类的子组件之一。我在这个班级没有看到任何儿童财产?我怎么可能遍历这个类的每个子组件并根据代码中的一些逻辑设置它的属性(我不能在模板本身中这样做)。

基本上我想做的是这样的:

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

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: apache-flex actionscript-3 flex3


    【解决方案1】:

    使用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";
    

    我还没有编译这个 - 但你明白了。

    【讨论】:

    • 这似乎只找到子级以下的一个级别,而不是递归地找到所有子级(这可能是有道理的,考虑到 UI 组件的 xml 范式)......我有兴趣知道的是 - 有没有一种方法或方式,无论他们处于什么级别,我都可以找到所有孩子(递归遍历)。谢谢。
    • 谢谢...我知道您在做什么...会试一试...不过我已经通过将其设为单例类并直接从某处设置属性来解决问题代码(我希望在其中嵌入这个逻辑)......但这看起来很有趣,我会试一试。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2013-04-05
    相关资源
    最近更新 更多