Apache flex Flex 3:在动作脚本块中的MXML组件中,对子组件的数据分配失败
我试图通过子组件的父组件的setter将赋值传播到子组件的数据参数。像这样: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
<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 我所有的定制组件都是画布。你真的需要绝对定位吗?我猜绝对容器的层次结构的更新方式与相对容器的更新方式不同。您应该能够覆盖更新的方式。如果有帮助的话,我以后会在家里看看。