2016-09-20 84 views
0

這是我遇到的一個奇怪問題或Flex 3的一個缺點。我使用SOAP消息傳遞協議,並從服務器填充「說明」字段,我有一個彈出式的反應是這樣的:Flex將數字字符串轉換爲指數形式

Fiddler response - GLNotes

由於這是SOAP我得到了響應,一個XML字符串。 GLNotes字段值是4582e12。

我如何處理這個響應的一些Flex代碼:

<mx:DataGrid dataProvider="{AccruedIncomeWS.GetAccruedIncomeList.lastResult.root.AccruedIncomeList.Item}" 
itemClick="AccrualClick(event);" id="AccrualList> 
    <mx:columns> 
     ... 
    </mx:columns> 
</mx:DataGrid> 

現在,我創建了AccrualList.selectedItem手錶表達,我看到:

SelectedItem numeric data

爲什麼GLNotes得到轉換數字在這裏?爲了測試這個隱式轉換我把一些字符在註釋和得到這個在監視表達式:

SelectedItem string data

隨着一些字母的GLNotes領域被視爲一個字符串的存在。無論如何,我可以使這個值強類型,並沒有任何隱式轉換應用?讓我知道是否需要額外的信息。謝謝!

編輯:

由於@Pan建議,我改變了我的dataProvider是一個ArrayCollection的 AccrualDataProvider。

<mx:DataGrid dataProvider="{AccrualDataProvider}" itemClick="AccrualClick(event);" id="AccrualList> 
    <mx:columns> 
     ... 
    </mx:columns> 
</mx:DataGrid> 

處理來自服務器的響應,並用它填充ArrayCollection的

private function HandleAccrualList(event:ResultEvent):void 
{ 
    AccrualDataProvider = new ArrayCollection(); 
    AccrualDataProvider = AppHelper.ForceArrayCollection(event.result.root.AccruedIncomeList.Item); 
} 

上進行調試,我發現,在的ArrayCollection AccrualDataProvider仍然包含GLNotes爲一個數字而不是一個字符串。

DataProvider object

這是可悲的,我們必須寫一些額外的代碼來避免這種隱式轉換,我的工作圍繞做的是:preceed的GLNotes與來自服務器的「/」發送,然後當在labelFunction中,使用'/'。所以flex將它視爲一個字符串並保持數字字​​符串不變。

是否有任何設置可以在服務器端完成,因此XML將強制字符串的數據類型爲SOAP XML響應?

回答

0

您可以嘗試使用labelFunction來顯示帶有datagrid數據的自定義視圖。

下面是一個例子(數據提供程序數組不是XML)

<mx:Script> 
    <![CDATA[ 

     [Bindable] 
     private var Item:Object = [{GLNodes:0x4582e12},{GLNodes:0x4582e13}]; 

     private function GLNodesLabelFunction(obj:Object, column:DataGridColumn):String 
     { 
      return (obj.GLNodes).toString(16);//show exponential form 
     } 
    ]]> 
</mx:Script> 

<mx:DataGrid dataProvider="{Item}" id="AccrualList"> 
    <mx:columns> 
     <mx:DataGridColumn labelFunction="GLNodesLabelFunction"/> 
    </mx:columns> 
</mx:DataGrid> 

如果問題仍然存在,你可以使用labelFunction後,我認爲這個問題可能是你如何使用XML數據提供程序。

+0

請參閱我的編輯問題根據您的迴應。 – rakemen