如果存在,则在连字符后面的第一个字母对Sencha Touch 2.1中的组列表进行排序

时间:2013-01-22 13:51:24

标签: javascript extjs sencha-touch sencha-touch-2 sencha-touch-2.1

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

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

因此,我希望按以下方式设置条件分组和排序功能: 如果{name}包含连字符:在第一个连字符后的第一个字母排序/分组,否则:按第一个字母排序

此外,如果字符串的其余部分相同,则某些名称将在没有前缀的情况下相同(例如P-白蛋白,U-白蛋白)。我希望对具有“白蛋白”的行进行前缀排序。而且,即使使用前缀,一些字符串也是相同的,而另一个字段例如是“年龄”会有所不同

{ 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剩余最后。

我感谢任何提示,指示,帮助和建议。

1 个答案:

答案 0 :(得分:3)

按名称排序,您可以在模型中创建转换后的字段。

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'
    ...
}
});

商店首先查看没有前缀的格式化名称,然后是完整名称,包括前缀,最后是年龄。