我正在尝试通过它的父组件的setter将赋值传播到子组件的data参数。像这样:
<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上使用Flex Builder 3插件,使用Flash 9 Debug ver。对于IE7。
注意:在这个特定的例子中,我试图避免故意绑定。我的意思是,为什么我不能手动将数据推送到子组件而不是绑定它?
答案 0 :(得分:2)
Flex会抑制数据设置器内部的错误,因为内容通常为空。问题可能是在调用set数据时未初始化子组件。如果你真的不能使用绑定(简单和干净的方式),那么你应该延迟设置子组件的数据,直到用invalidateProperties / commitProperties初始化它。
在数据设置器中,调用invalidateProperties()并设置一个标记,表示它们已更改。
覆盖commitProperties(不要忘记调用super),检查标志,如果是,则设置子组件的数据。
如果永远不会调用commitProperties块,请在creationComplete上尝试invalidateProperties。
答案 1 :(得分:0)
您的自定义组件和子组件基于哪些组件?他们扩展了什么?
我尝试了一个扩展HBox和VBox的基本示例,一切都很顺利。
您可以看到结果here,已启用源视图。
我猜我没有问题,因为我正在扩展添加到显示列表的组件,因此它们是生命周期的一部分,与父母一起检查测量/数据/等。
希望有所帮助