apache-flex 将数字字符串转换为指数形式的Flex

eqoofvh9  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(193)

这是我遇到的一个奇怪的问题,或者说是Flex 3的一个缺点。我正在使用SOAP消息传递协议,服务器对我在弹出窗口中填写“Notes”字段的响应如下所示:

因为这是SOAP,所以我得到的响应是XML字符串。GLNotes字段值是4582 e12。
关于如何处理此响应的一些Flex代码:

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

现在,我为AccrualList.selectedItem创建了一个监视表达式,我看到:

为什么GLNotes在这里被转换成一个Number?为了测试这个隐式转换,我在notes字段中放入了一些字符,并在watch表达式中得到了这个:

由于存在一些字母,GLNotes字段被视为字符串。是否有任何方法可以使此值成为强类型,而不应用任何隐式转换?如果需要其他信息,请告诉我。谢谢!

编辑:

正如@Pan所建议的,我将我的数据提供者更改为一个 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作为数字而不是字符串。

遗憾的是,我们必须编写一些额外的代码来避免这种隐式转换,我所做的工作是:从服务器发送时,在GLNotes前面加上“/”,然后在labelFunction中取消转义“/”。因此,flex将其视为字符串,并保持数字字符串不变。
是否可以在服务器端进行任何设置,以便XML对SOAP XML响应强制使用字符串数据类型?

7xzttuei

7xzttuei1#

您可以尝试使用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的使用上。

相关问题