Actionscript 3 在父级中找不到Flex子级id

Actionscript 3 在父级中找不到Flex子级id,actionscript-3,apache-flex,canvas,Actionscript 3,Apache Flex,Canvas,我的Flex 3应用程序有问题 < mx:Canvas id="detailsHeader" > < mx:HBox id="contentContainer" > < mx:Canvas id="listContainer" /> < mx:HBox /> < mx:Canvas /> 其他答案没有告诉你的是,为什么你的代码不起作用 当您给元素一个ID时,生成的ActionScript代码

我的Flex 3应用程序有问题

< mx:Canvas id="detailsHeader" >    
    < mx:HBox id="contentContainer" >
       < mx:Canvas id="listContainer" />
    < mx:HBox />
< mx:Canvas />




我无法通过代码动态访问“contentContainer”。 即使其已创建、可见、可单击且工作正常


detailsHeader.hasOwnProperty(“contentContainer”)==false
detailsHeader[“contentContainer”]==失败(错误)
detailsHeader.getChildByName(“contentContainer”)==null

(ReferenceError:Error#1069:在mx.containers.Canvas上找不到属性contentContainer,并且没有默认值。)

我就是不明白。
Iam为每个提示打开。

如果您将mxml代码调整为:

< mx:Canvas id="detailsHeader" >    
    < mx:HBox id="contentContainer" name="contentContainerName">
       < mx:Canvas id="listContainer" />
    < mx:HBox />
< mx:Canvas />
使用“Name”属性来实现getChildByName,尝试不执行,而是使用objA objB键链和子对象,然后您可以根据您的开发明确创建所需的动态逻辑

private function access():void
    {
        var objA:Object = detailsHeader.getChildByName("contentContainer");
        var objB:Object = contentContainer.getChildByName("listContainer");
    }



    ]]>
</mx:Script>

<mx:Canvas id="detailsHeader">
    <mx:HBox id="contentContainer" name="contentContainer">
        <mx:Canvas id="listContainer" name="listContainer">

        </mx:Canvas>
    </mx:HBox>
</mx:Canvas>       
private function access():void
{
var objA:Object=detailsHeader.getChildByName(“contentContainer”);
var objB:Object=contentContainer.getChildByName(“listContainer”);
}
]]>

其他答案没有告诉你的是,为什么你的代码不起作用

当您给元素一个ID时,生成的ActionScript代码将是类级别的变量/属性。我指的不是用作容器的类,而是使用元素的类

例如:

<!-- MyGroup.mxml -->
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark">
    <s:VGroup id="first">
        <s:Rect id="second"/>
    </s:VGroup>
</s:Group>

first
将是
MyGroup
的一个属性,而
second
也将是该属性
second
不是
first
的属性,它是它的子属性

仔细想想,这很有道理:假设我相信
second
first
的一个属性。当我决定不再需要
first
(毕竟这只是一个布局类)并将其删除时,所有引用
second
的代码都会中断,因为无法再以相同的方式访问它。
但是,如果
second
MyGroup
的一个属性,您可以简单地删除
first
,并且所有与
second
相关的代码都会继续工作,就好像什么都没发生一样


因此,作为一种总结,尽管关于
getChildByName
的答案在技术上是正确的,但从维护的角度来看,我认为您不应该这样编码。

示例:“contentContair.visible”(作为访问)对您不起作用?为什么要通过父级访问?是的。我也不喜欢应用程序的构造方式。这是遗产,不是我自己的。这绝对有道理。我只是忘记了mxml将所有的child放在主定义中。谢谢你的提示。我通常递归地使用这些函数来调试本机AS3显示树。Regards@Akirage有一个应用程序可用于此;)退房或
<!-- MyGroup.mxml -->
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark">
    <s:VGroup id="first">
        <s:Rect id="second"/>
    </s:VGroup>
</s:Group>