Actionscript 3 在父级中找不到Flex子级id
我的Flex 3应用程序有问题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代码
< 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>