【问题标题】:Initialize properties of custom component before creating children in flex在 flex 中创建子组件之前初始化自定义组件的属性
【发布时间】:2010-04-16 15:12:44
【问题描述】:

假设我有以下自定义组件:

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script>
    <![CDATA[
        [Bindable]
        public var prop:String;

        private function formatProp() : String {
            return "Hello, " + prop;
        }

    ]]>
    </fx:Script>

    <s:Label text="User: {prop}"/>
    <s:Label text="Greeting: {formatProp()}"/>
</s:Group>

如果我像这样将它添加到我的应用程序中:

<local:MyComponent prop="Hello"/>

结果如下:

用户:马克
问候语:你好,null

Flex 似乎在我的自定义组件上设置了prop,因为它已经初始化了子标签,所以它依赖于属性更改事件来设置用户标签。

有没有一种优雅的方法可以让 Flex 在最初评估绑定之前等待我的所有组件属性设置好?

注意:我意识到 formatProp 函数是微不足道的,可以内联包含,但这只是一个简化的示例。

【问题讨论】:

  • 您是否尝试从 creationComplete 事件中运行您的 formatProp 方法?

标签: apache-flex data-binding custom-component


【解决方案1】:

“优雅的方式”是实际提供数据绑定,这样您之后也可以更改您的属性。您最初的想法看起来不错,使用 Cornel 提供的答案。我只是想提一下这一点,因为您的实际问题听起来更像是您知道您的数据绑定不起作用并且您只是想推迟变量的初始设置。

顺便说一句,如果您打算在 Actionscript(而不是 mxml)中创建自定义组件,您将面临相反的问题:属性是在您有机会实际创建您的孩子之前设置的,因此如果它们可能需要缓冲它们实际上应该会影响一些孩子的属性。

【讨论】:

    【解决方案2】:

    它与组件生命周期无关,更多与绑定规则有关。您的函数“formatProp”应该接收参数“prop”作为参数,以便在 prop 更改时调用。试试这个代码:

            private function formatProp(props:String) : String {
                return "Hello, " + props;
            }
            <s:Label text="Greeting: {formatProp(prop)}"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多