2016-09-20 83 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