按中文排序:
Ext.data.Store.prototype.createComparator = function(sorters){
return function(r1, r2){
var s = sorters[0], f=s.property;
var v1 = r1.data[f], v2 = r2.data[f];
var result = 0;
if(typeof(v1) == "string"){
result = v1.localeCompare(v2);
if(s.direction == 'DESC'){
result *=-1;
}
} else {
result =sorters[0].sort(r1, r2);
}
var length = sorters.length;
for(var i = 1; i<length; i ++){
s = sorters[i];
f = s.property;
v1 = r1.data[f];
v2 = r2.data[f];
if(typeof(v1) == "string"){
result = result || v1.localeCompare(v2);
if(s.direction == 'DESC'){
result *=-1;
}
} else {
result = result || s.sort.call(this, r1, r2);
}
}
return result;
};
};
按数字大小排序:
Ext.data.Store.prototype.createComparator = function(sorters){
return function(r1, r2){
var s = sorters[0], f=s.property;
var v1 = r1.data[f], v2 = r2.data[f];
var result = 0;
if(typeof(v1) == "string"){
if(v1.length > v2.length ){
result = v1.localeCompare("0."+v2);
}else if(v1.length < v2.length ){
result = ("0."+v1).localeCompare(v2);
}else if(v1.length == v2.length ){
result = v1.localeCompare(v2);
}
if(s.direction == 'DESC'){
result *=-1;
}
} else {
result =sorters[0].sort(r1, r2);
}
return result;
};
};
extjs中,grid表格默认的排序是按照ASCII来排序的。js中只有String类的localeCompare方法有排序的功能,number类没有排序功能,正好直接调用localeCompare方法,实现按数字大小排序。经过验证,功能可用