Apache flex 分组集合,将数字5与字符串“分隔”;5“;

Apache flex 分组集合,将数字5与字符串“分隔”;5“;,apache-flex,actionscript-3,flex3,advanceddatagrid,Apache Flex,Actionscript 3,Flex3,Advanceddatagrid,背景:我有一个高级数据网格。此ADG的数据提供程序是ArrayCollection。此AC的ID字段上有一个分组集合 此AC中的一对项目示例AC var名称为“arcTemplates”: 导致分组的Flex代码示例: <mx:AdvancedDataGrid displayItemsExpanded="true" id="gridTemplates"> <mx:dataProvider> <mx:GroupingCollection id="gc" s

背景:我有一个高级数据网格。此ADG的数据提供程序是ArrayCollection。此AC的ID字段上有一个分组集合

此AC中的一对项目示例AC var名称为“arcTemplates”:

导致分组的Flex代码示例:

<mx:AdvancedDataGrid displayItemsExpanded="true" id="gridTemplates">
  <mx:dataProvider>
    <mx:GroupingCollection id="gc" source="{arcTemplates}">
      <mx:Grouping >
        <mx:GroupingField name="templateTypeID" compareFunction="gcSort">
问题:在我的AC示例中,有几个项目,项目0、32和56正确排序并分组到它们的templateTypeID,但项目55做了一些奇怪的事情。它似乎在数字5上排序/分组,而不是字符串“5”。变得越来越陌生。如果我将name属性更改为包含文本(so 1234x),它将正确地对字符串“5”进行排序/分组


问题:这里发生了什么,我如何修复它?

如果我信任你的跟踪,你会发现
name=1234
是没有引号的,所以它被认为是一个
数字

当您在
gcSort
字符串(a.templateTypeID+a.name)
中执行此操作时,实际上这次您添加了两个数字(
5+1234
),并将它们转换回
字符串
=>
“1239”

您可以先将名称转换为字符串,然后进行连接:

(a.templateTypeID + a.name.toString()).toLowerCase()

谢谢Patrick,测试了你的修复,效果很好。是这样一个初学者的错误:-(但这对我来说是很早的代码。我想这也让我感到惊讶,第32项的分组/排序很好,这实际上相当混乱,但我现在明白了原因。
public function gcSort(a:Object, b:Object):int{
    return ObjectUtil.stringCompare(String(a.templateTypeID + a.name).toLowerCase(), 
                                    String(b.templateTypeID + b.name).toLowerCase());
}
(a.templateTypeID + a.name.toString()).toLowerCase()