0

我正在尝试通过其父组件的设置器将分配传播给子组件的数据参数。像这样:

<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。

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

4

2 回答 2

2

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

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

覆盖commitProperties(别忘了调用super),检查flag,如果是true,设置子组件的数据。

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

于 2009-08-27T21:13:24.940 回答
0

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

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

您可以在此处看到结果,启用源视图。

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

希望能帮助到你

于 2009-08-26T23:25:05.273 回答