2011-05-29 66 views
1

我正在爲不同的步驟創建一個具有幾個不同狀態的接口。對於這些步驟,我從數據庫中提取數據以填充某些字段。Flex 4.5範圍之間的問題

截至目前,我正在做一個數據庫查詢來獲取所有的數據,並希望在同一時間填寫所有的字段,但它給了我「訪問空對象引用」。

當您嘗試使用actionscript訪問文本輸入字段時,似乎存在範圍問題,當文本輸入處於的狀態不是當前狀態時。

有沒有解決這個辦法嗎?

對於實施例(這將拋出一個「空對象引用」的錯誤):

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
      creationComplete="init()"> 
<s:states> 
<s:State name="State1"/> 
<s:State name="state2"/> 
</s:states> 
<fx:Script> 
    <![CDATA[ 
     import mx.events.FlexEvent; 

     protected function init(event:FlexEvent):void 
     { 
      ti_test.text = "Hello World"; 
     } 

    ]]> 
</fx:Script> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<s:TextInput id="ti_test" includeIn="state2" x="323" y="197"/> 
</s:Application> 

回答

0

的Flex只會使當前狀態。所以你只能在創建textinput時調用init()函數。你可以是這樣做的:

<s:TextInput id="ti_test" includeIn="state2" creationComplete"init()" x="323" y="197"/> 

現在你說你想放的價值有即使在創建之前,恐怕是不可能的。你需要做的是製作一個代表你的數據庫對象的動作類。然後將適當的值分配給該類的一個實例。然後你把這樣的

<s:TextInput id="ti_test" includeIn="state2" text="{dataObject.textValue}" x="323" y="197"/> 

如果你真的不想做一個類,那麼你可以把所有不同的變量在您的應用程序,然後分配數據給。 你會再有這樣的事情

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
      creationComplete="init()"> 
<fx:Script> 
    <![CDATA[ 
     import mx.events.FlexEvent; 

     [Bindable] 
     var textValue:String; 

     protected function init(event:FlexEvent):void 
     { 
      textValue = "Hello World"; 
     } 

    ]]> 
</fx:Script> 
<fx:Declarations> 

</fx:Declarations> 

<s:states> 
<s:State name="State1"/> 
<s:State name="state2"/> 
</s:states> 
<s:TextInput id="ti_test" text="textValue" includeIn="state2" x="323" y="197"/> 
</s:Application> 
+0

你的工作,是的,但我試圖弄清楚,我將如何分配一個值到ti_test與動作,而我仍然在狀態1。 – 2011-05-30 00:01:34

+0

我得到的數據來自數據庫。在完成數據庫查詢之後,調用結果函數。當被調用時,我想填寫每個狀態的所有信息,而不是存儲它,並在它們到達狀態時填寫它。 – 2011-05-30 00:09:44

+0

@Kevin Mann:你將不得不將它存儲在主應用程序或單獨的課程中,這取決於你。沒有其他辦法! – Sparky 2011-05-30 00:29:17

3

Flex僅導致各州在需要的時候(你不改變它們不可用的狀態,即使經過正確的,因爲在接下來的渲染週期柔性等待,使它們,從而優化過程)。這可能很難處理,但是,有時在更改狀態之前或之後需要某些對象,因爲這些對象使用itemCreationPolicy=immediate這會刪除flex優化,但可以讓您立即使用該對象。

所以,要回答你的問題,在你的文本字段中加入itemCreationPolicy=immediate應該可以解決你的問題,而不需要額外的工作。