【问题标题】:Flex converting numeric string to exponential formFlex将数字字符串转换为指数形式
【发布时间】:2016-09-20 23:43:11
【问题描述】:

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

因为这是 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 创建了一个监视表达式,我看到了:

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

由于某些字母的存在,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 作为数字而不是字符串。

很遗憾,我们必须编写一些额外的代码来避免这种隐式转换,我的解决方法是:在从服务器发送时在 GLNotes 前面加上“/”,然后在 labelFunction 中,取消转义'/'。所以flex把它当作一个字符串来处理,保持数字字​​符串不变。

是否可以在服务器端进行任何设置,以便 XML 将字符串数据类型强制用于 SOAP XML 响应?

【问题讨论】:

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


    【解决方案1】:

    您可以尝试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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多