sencha touch :: 如果首字母小写或大写,如何让商店分拣机忽略
Posted
技术标签:
【中文标题】sencha touch :: 如果首字母小写或大写,如何让商店分拣机忽略【英文标题】:sencha touch :: how to make store sorter ignore if first letter is small or capitalized 【发布时间】:2011-07-13 10:20:16 【问题描述】:我想知道如果名称的第一个字母是小写还是大写,如何让商店分拣员忽略? 我希望将具有相同首字母的列表项组合在一起,或者至少将第一个小写字母放在大写字母下方,而不是像它最初首先有一个大写字母列表,然后是小写字母列表。
我发现了类似的东西
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);
【问题讨论】:
【参考方案1】:基于 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();
只是让您知道,这是完全未经测试的。 :)
【讨论】:
嘿,谢谢!使用您的代码,我收到错误消息:“TypeError:表达式'this.sorters.clear'[undefined] 的结果不是函数。” 啊,如果将 sorterFn 的前两行切换为: var v1 = this.getRoot(o1).get(this.property).toLowerCase(), v2 = this.getRoot(o2 ).get(this.property).toLowerCase();应该运行。【参考方案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];
);
【讨论】:
以上是关于sencha touch :: 如果首字母小写或大写,如何让商店分拣机忽略的主要内容,如果未能解决你的问题,请参考以下文章