Apache flex Flex 3:在动作脚本块中的MXML组件中,对子组件的数据分配失败

Apache flex Flex 3:在动作脚本块中的MXML组件中,对子组件的数据分配失败,apache-flex,actionscript,flex3,mxml,variable-assignment,Apache Flex,Actionscript,Flex3,Mxml,Variable Assignment,我试图通过子组件的父组件的setter将赋值传播到子组件的数据参数。像这样: <CustomComponent xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="components.*" > <mx:Script> <![CDATA[ public override function set data(val:Object):void

我试图通过子组件的父组件的setter将赋值传播到子组件的数据参数。像这样:

<CustomComponent
     xmlns:mx="http://www.adobe.com/2006/mxml"
     xmlns="components.*"
    >
    <mx:Script>
        <![CDATA[
            public override function set data(val:Object):void
            {
                super.data = val;

                subComponent.data = val; //ref #1
            }
        ]]>
    </mx:Script>
    <CustomSubComponent id="subComponent"
        />
</CustomComponent>

当我运行应用程序时,子组件从未收到其数据。当调试并单步执行到标记为“ref#1”的行时,调试器跳出该方法并继续执行其他操作,就好像该方法已完成一样。似乎抛出了一些异常或错误,但控制台没有指出此分配有什么问题

我在做什么蠢事吗?这似乎很直截了当

环境:这是使用Flex SDK 3.2,Windows上Eclipse的Flex Builder 3插件,以及Flash 9调试版本。对于IE7


注意:在这个特殊的例子中,我试图避免故意绑定。我的意思是,为什么我不能手动将数据推送到子组件而不是绑定它?

您的自定义组件和子组件基于哪些组件?它们扩展了什么

我尝试了一个扩展HBox和VBox的基本示例,结果一切顺利

您可以看到结果,启用了源代码视图

我猜我没有问题,因为我正在扩展添加到显示列表中的组件,因此它们的生命周期的一部分是与家长检查测量/数据等


希望它有助于Flex抑制数据设置程序内部的错误,因为数据经常为空。问题可能是在调用set data时您的子组件没有初始化。如果您真的不能使用绑定(简单而干净的方式),那么您应该延迟设置子组件的数据,直到使用invalidateProperties/commitProperties初始化它

在数据设置程序中,调用invalidateProperties()并设置一个标志,表明它们已更改

重写commitProperties(不要忘记调用super),检查标志,如果为true,则设置子组件的数据


如果从未调用commitProperties块,请尝试在creationComplete上使用invalidateProperties

我所有的定制组件都是画布。你真的需要绝对定位吗?我猜绝对容器的层次结构的更新方式与相对容器的更新方式不同。您应该能够覆盖更新的方式。如果有帮助的话,我以后会在家里看看。