在父级中找不到Flex子ID

时间:2013-12-12 17:33:22

标签: actionscript-3 flex canvas

我的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"] == fail(error) detailsHeader.getChildByName("contentContainer") == null

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

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

3 个答案:

答案 0 :(得分:0)

如果您将mxml代码调整为:

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

然后通过以下呼叫提供“contentContainer”:

detailsHeader.getChildByName("contentContainerName");

答案 1 :(得分:0)

使用“Name”属性来实现getChildByName,尽量不要使用objA objB keychain和child对象,然后根据开发情况明确创建所需的动态逻辑。

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>       

答案 2 :(得分:0)

其他答案没有告诉您,为什么您的代码无效。

为元素提供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的答案在技术上是正确的,但从维护的角度来看,我认为你不应该这样编码。