0

いくつかのデータを保持する配列コレクション オブジェクト 'invArrayCol' があります。データグリッドもあります。dataProvider を invArrayCol として設定しました。データ グリッドで使用すると、データが正しく表示されます。しかし、データグリッド以外の場所で使用すると、同じ invArrayCol が null を示します。私はこのコードを書きました

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 の値を null として与えます。

datagrid_dataprovider=new ArrayCollection();
datagrid_dataprovider=invArrayCol;

ここから抜け出す方法を教えてください。

4

1 に答える 1

1

データの長さが1の場合、ResultEventの結果はObjectProxyを返す場合があります。「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

したがって、一部のコードでは同期的に実行されることが期待されているように見えますが、常に非同期で動作しています。

于 2012-06-01T07:52:18.170 に答える