在flex中创建子项之前初始化自定义组件的属性

时间:2010-04-16 15:12:44

标签: flex data-binding custom-component

说我有以下自定义组件:

<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"/>

结果如下:

User: Mark
Greeting: Hello, null

在我的自定义组件初始化子标签之后,Flex似乎正在设置prop,因此它依赖于属性更改事件来设置用户标签。

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

注意:我意识到formatProp函数很简单,可以包含在内,但这只是一个简化的例子。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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