2012-06-01 34 views
0

我有一個數組集合對象'invArrayCol',它包含一些數據。我也有一個數據網格。我已經將dataProvider設置爲invArrayCol.I,當我在數據網格中使用它時正確顯示數據。但是同樣的invArrayCol在datagrid以外的任何地方使用時顯示爲空。我寫了這個代碼Flex:無法獲得數組集合中的值

protected function titlewindow1_creationCompleteHandler(event:FlexEvent):void 
{ 
    Cgt=new CgtSRObject(); 

    var autoobj:CSAutoNumberType=new CSAutoNumberType(); 
    autoobj.addEventListener(ResultEvent.RESULT,getInvNubmer); 
    autoobj.getInvNo(invoiceType); 

    trace(robj.salesPerson_Id);  

    getSalesReturnCgt.token=csInvoicePrint.getCgtData(robj.receive_Id); 
    getSalesReturnCgt.addEventListener(ResultEvent.RESULT,getInvArrList); 
    trace(Cgt.sr_no); 

    datagrid_dataprovider=new ArrayCollection(); 
    datagrid_dataprovider=invArrayCol; 
    calculateTotal(); 
} 

這2條線設置數據invArrayCol

getSalesReturnCgt.token=csInvoicePrint.getCgtData(robj.receive_Id); 
getSalesReturnCgt.addEventListener(ResultEvent.RESULT,getInvArrList); 

但在這裏它提供了invArrayCol的一個空值。

datagrid_dataprovider=new ArrayCollection(); 
datagrid_dataprovider=invArrayCol; 

請告訴我一些出路。

+0

你說變量'invArrayCol'爲空。但是在你顯示的代碼中,這個變量永遠不會被賦值(所以它將會爲空)。您所顯示的代碼片段不足以診斷問題。另外,爲什麼你要設置數據網格的dataProvider兩次?第一次到一個新的ArrayCollection,然後第二次到'invArrayCol'? –

回答

1

ResultEvent的結果可能會返回一個ObjectProxy,以防數據長度爲1.通過'as'投射會導致演員無聲失敗。因此,簡單地檢查結果的類型可以讓您確定結果是否可以直接使用,或者是否需要在其周圍包裝ArrayCollection。

// This happens asynchronously, should have no effect in the function 
getSalesReturnCgt.addEventListener(ResultEvent.RESULT,getInvArrList); 

此外,

// datagrid_dataprovider=new ArrayCollection(); // This line is obsoloete 
datagrid_dataprovider=invArrayCol; // invArrayCol will get its value later 

所以,它看起來像你的期望是一些代碼有它同步執行,但它始終是異步工作。