在Sencha Touch 2.1中按连字符后的首字母排序,分组列表

Sort, group list in Sencha Touch 2.1 by first letter after hyphen if present

本文关键字:排序 列表 Touch Sencha 连字符      更新时间:2023-09-26

我有数据集要在使用Sencha Touch 2.1的列表中使用,其中大多数项目以前缀开头(例如p -, S-, CSV-等)。然而,有些人却没有。

前缀与列表排序和分组无关(因为前缀不是用户将要查找的)。如果所有条目都有前缀,并且前缀都是单个字母,我就按第三个字母排序。由于情况并非如此,我真的不知道如何继续。

因此,我想建立一个条件分组排序函数,如下所示:如果{name}包含连字符:按第一个连字符后的第一个字母排序/分组,否则:按第一个字母

排序

此外,一些名称将是相同的,没有前缀(例如p -Albumin, U-Albumin),如果字符串的其余部分是相同的,我希望与"白蛋白"的行排序他们的前缀。此外,即使有前缀,一些字符串将是相同的,另一个字段,例如。"age"不同

{ name: 'P-Albumin', age: '40 - 50' },
{ name: 'P-Albumin', age: '20 - 30' },
{ name: 'CSV-Albumin', age: '30' },
{ name: 'ASAT', age: '30'},

将在字母A下分组,并进行排序,使年龄等于20 - 30的行位于等于40 - 50的行之前,而前缀为CSV-的行依次位于它们之前,ASAT留在最后。

对于按名称排序,您可以在模型中创建一个转换字段。

Ext.define('MyApp.model.MyModel', {
extend : 'Ext.data.Model',
config : {
    fields : ['name', 'age', 
        {
        name : 'formattedName',
        type : 'string',
        convert : function(v, record) {
            var unformattedName = record.get('name');
            if (unformattedName.indexOf("-") != -1) {
                return unformattedName.substring(unformattedName
                        .indexOf("-"));
            } else {
                return unformattedName;
            }
        }
    }]
}
});

现在你可以在你的存储配置

中设置排序优先级
Ext.define('MyApp.store.MyStore', {
extend : 'Ext.data.Store',
config : {
    model : "MyApp.model.MyModel",
    sorters: 'formattedName, name, age'
    ...
}
});

存储首先查看没有前缀的格式化名称,然后查看包含前缀的完整名称,最后查看年龄。