0

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

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

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

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

{ 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 留在最后。

我很感激我能得到的任何提示、指示、帮助和建议。

4

1 回答 1

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

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

于 2013-01-22T15:03:41.260 回答