日期:2014-05-16 浏览次数:20410 次
摘自深入浅出ExtJs
?
Ext默认使用ASCII进行排序,为了让表格实现中文排序功能,需要重写Ext.data.Store的applySort函数
代码如下:
?
Ext.data.Store.prototype.applySort = function(){
if(this.sortInfo && !this.remoteSort){
var s = this.sortInfo,
f = s.field;
var st = this.fields.get(f).sortType;
var fn = function(r1,r2){
var v1 = st(r1.data[f]),v2 = st(r2.data[f]);
if(typeof(v1) == 'string'){
return v1.localeCompare(v2);
}
return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
};
this.data.sort(s.direction,fn);
if(this.snapshot && this.snapshot != this.data){
this.snapshot.sort(s.direction,fn);
}
}
};
?
?可以将这段代码加到ext-all.js文件的最后,或者放到HTML页面的最上面,总之是要在EXT初始化之后,实际代码调用之前执行.
一般实现结构
?
Ext.data.Store.prototype.applySort = function(){
........................
}
Ext.onReady(function(){
................
});
?
?
?
完整示例代码:
?
Ext.onReady(function(){
//中文排序功能,重写Ext.data.Store的applySort函数
Ext.data.Store.prototype.applySort = function(){
if(this.sortInfo && !this.remoteSort){
var s = this.sortInfo,
f = s.field;
var st = this.fields.get(f).sortType;
var fn = function(r1,r2){
var v1 = st(r1.data[f]),v2 = st(r2.data[f]);
if(typeof(v1) == 'string'){
return v1.localeCompare(v2);
}
return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
};
this.data.sort(s.direction,fn);
if(this.snapshot && this.snapshot != this.data){
this.snapshot.sort(s.direction,fn);
}
}
};
//列定义:
var cm = new Ext.grid.ColumnModel([
{header:'编号',dataIndex:'id'},
{header:'名称',dataIndex:'name'},
{header:'描述',dataIndex:'descn'}
]);
var data2= [['1','啊','descn1'],
['2','啵','descn2'],
['3','呲','descn3'],
['4','嘚','descn4'],
['5','咯','descn5'],
];
//数据存储
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data2),
reader: new Ext.data.ArrayReader({},[
{name:'id'},
{name:'name'},
{name:'descn'}
]),
sortInfo:{field:'name',direction:'ASC'}
});
//初始化数据
store.load();
var grid = new Ext.grid.GridPanel({
//enableColumnMove:false,
//enableColumnResize:false,
//斑马显示效果
stripeRows:true,
//显示loding.....
loadMask:true,
autoHeight:true,
renderTo:'grid',
store:store,
cm:cm
});
});
?
?
?