0

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

<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

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

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

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

4

2 回答 2

1

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

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

于 2010-06-22T11:09:53.403 回答
0

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

        private function formatProp(props:String) : String {
            return "Hello, " + props;
        }
        <s:Label text="Greeting: {formatProp(prop)}"/>
于 2010-04-16T15:36:55.887 回答