初始化属性

问题描述:

说我有以下的自定义组件:初始化属性

<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函数是微不足道的,可以内联包含,但这只是一个简单的例子。

+0

你尝试从creationComplete事件中运行你的formatProp metehod吗? – Robusto 2010-04-16 15:33:47

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

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

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

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