【问题标题】:Flex 3: Data assignment to a subcomponent fails in an MXML component in the action script blockFlex 3:在动作脚本块中的 MXML 组件中向子组件分配数据失败
【发布时间】:2009-08-26 22:20:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: apache-flex actionscript flex3 mxml variable-assignment


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      我尝试了一个扩展 HBox 和 VBox 的基本示例,一切正常。

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

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

      希望对你有帮助

      【讨论】:

      • 我所有的自定义组件都是画布。
      • 你真的需要绝对定位吗?我猜绝对容器的层次结构不会以与相对容器相同的方式更新。您应该能够覆盖更新的方式。如果有帮助,我稍后会回家看看。
      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 2011-05-19
      • 2010-12-23
      • 2010-12-08
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多