我想知道如果名字的第一个字母很小或大写,如何让商店分拣机忽略? 我希望将具有相同第一个字母的列表项组合在一起,或者至少在大写字母下面放置小的第一个字母,而不是像它最初首先具有列表ob大写的名称和下面的小写首字母列表。 / p>
我找到了像
这样的东西var sorter = new Ext.util.Sorter({
property : 'myField',
sorterFn: function(o1, o2) { // compare o1 and o2 }
});
var store = new Ext.data.Store({
model: 'myModel',
sorters: [sorter]
});
store.sort();
这可能很有用。
感谢名单!
编辑:这似乎有效:
var mySubStore = app.stores.myStore.findRecord('id', recordID).websites();
app.stores.myStore.findRecord('id', recordID).websites().getGroupString = function(instance) {
return instance.get('name')[0].toUpperCase();
};
var sorter = new Ext.util.Sorter({
property : 'name',
sorterFn: function(o1, o2) {
var v1 = this.getRoot(o1).get(this.property).toLowerCase(),
v2 = this.getRoot(o2).get(this.property).toLowerCase();
return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
},
clear: function(){}
});
//mySubStore.sorters = [sorter];
mySubStore.sort(sorter);
答案 0 :(得分:3)
基于Ext.util.Sorter类中定义的'defaultSorterFn',你可以改变它以始终将值比较为小写(或大写)
var sorter = new Ext.util.Sorter({
property : 'myField',
sorterFn: function(o1, o2) {
var v1 = this.getRoot(o1).get(this.property).toLowerCase(),
v2 = this.getRoot(o2).get(this.property).toLowerCase();
return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
}
});
var store = new Ext.data.Store({
model: 'myModel',
sorters: [sorter]
});
store.sort();
只是为了让您知道,这是完全未经测试的。 :)
答案 1 :(得分:2)
对我来说,最好的解决方案似乎是在模型中添加了另一个属性,并在商店中使用它来对其进行分组和排序:
//Model
Person = Ext.regModel('Person',
{
fields:
[
{name: 'id', type:'int'},
{name: 'name', type:'string'},
{
name: 'sortAndGroupName',
convert: function(value, record)
{
return record.get('name').toUpperCase();
}
}
]
});
//Store
PersonStore = Ext.regStore('PersonStore',
{
model: 'Person',
sorters: [{ property: 'sortAndGroupName', direction: 'ASC'}],
getGroupString : function(record)
{
return record.get('sortAndGroupName')[0];
}
});