2010-04-16 260 views
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"/> 

結果是這樣的:

User: Mark 
Greeting: Hello, null

看來Flex在我的自定義組件後面設置了prop已經初始化了子標籤,所以它依賴於屬性更改事件來設置用戶標籤。

是否有一種優雅的方式讓Flex在開始評估綁定之前等待我的所有組件屬性被設置?

注:我意識到formatProp函數是微不足道的,可以內聯包含,但這只是一個簡單的例子。

+0

你嘗試從creationComplete事件中運行你的formatProp metehod嗎? – Robusto 2010-04-16 15:33:47

回答

0

它與組件生命週期無關,更多與綁定規則有關。你的函數「formatProp」應該接收參數「prop」作爲參數,以便在prop改變時被調用。試試這個代碼:

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

的「優雅的方式」將實際提供的數據綁定,讓你也可以以後改變屬性。你的最初想法看起來不錯,與Cornel提供的答案一致。我只想提到這一點,因爲你的實際問題聽起來更像是你知道你的數據綁定不起作用,你只是想推遲變量的初始設置。

順便說一句,如果您計劃在Actionscript(而不是mxml)中創建自定義組件,您將面臨相反的問題:在您有機會真正創建子項之前設置屬性,因此如果您需要緩衝它們他們實際上應該影響一些孩子的財產。