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

时间:2009-08-26 22:20:32

标签: flex actionscript flex3 mxml variable-assignment

我正在尝试通过它的父组件的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。

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

2 个答案:

答案 0 :(得分:2)

Flex会抑制数据设置器内部的错误,因为内容通常为空。问题可能是在调用set数据时未初始化子组件。如果你真的不能使用绑定(简单和干净的方式),那么你应该延迟设置子组件的数据,直到用invalidateProperties / commitProperties初始化它。

在数据设置器中,调用invalidateProperties()并设置一个标记,表示它们已更改。

覆盖commitProperties(不要忘记调用super),检查标志,如果是,则设置子组件的数据。

如果永远不会调用commitProperties块,请在creationComplete上尝试invalidateProperties。

答案 1 :(得分:0)

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

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

您可以看到结果here,已启用源视图。

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

希望有所帮助