我使用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剩余最后。
我感谢任何提示,指示,帮助和建议。
答案 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'
...
}
});
商店首先查看没有前缀的格式化名称,然后是完整名称,包括前缀,最后是年龄。