Flex将数字字符串转换为指数形式

时间:2016-09-20 23:43:11

标签: xml web-services actionscript-3 flex soap

这是我遇到的一个奇怪的问题或Flex 3的缺点。我正在使用SOAP消息传递协议和来自服务器的响应来填充“注释”。我在弹出窗口中显示的字段如下:

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会在这里转换为数字?为了测试这个隐式转换,我在notes字段中放了一些字符,并在watch表达式中得到了它:

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);
}

在Debug上,我发现, ArrayCollection AccrualDataProvider仍然包含GLNotes作为数字而不是字符串。

DataProvider object

很遗憾我们必须编写一些额外的代码来避免这种隐式转换,我为解决方案所做的是:在GLNotes之前加上&#39; /&#39;从服务器发送然后在labelFunction中发送&#39; /&#39;。因此,flex将其视为字符串并保持数字字​​符串不变。

是否可以在服务器端进行任何设置,因此XML强制将字符串的数据类型转换为SOAP XML响应?

1 个答案:

答案 0 :(得分:0)

您可以尝试labelFunction使用数据网格数据显示自定义视图。

这是一个例子(数据提供者是数组而不是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 dataProvider。