Apache flex 分组集合,将数字5与字符串“分隔”;5“;
背景:我有一个高级数据网格。此ADG的数据提供程序是ArrayCollection。此AC的ID字段上有一个分组集合 此AC中的一对项目示例AC var名称为“arcTemplates”: 导致分组的Flex代码示例: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
<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()