sencha touch ::如果首字母小或大写,如何使商店分类器忽略

时间:2011-07-13 10:20:16

标签: sorting sencha-touch store

我想知道如果名字的第一个字母很小或大写,如何让商店分拣机忽略? 我希望将具有相同第一个字母的列表项组合在一起,或者至少在大写字母下面放置小的第一个字母,而不是像它最初首先具有列表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);

2 个答案:

答案 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];
  }
});