ExtJS4.2学习(四)Grid表格中文排序问题

我们在表格中指定某列排序的时候,我发现排序的时候,中文并没有很好的按照规律排序,国际上都使用ASCII码进行排序,而我们却拼音排序,Ext自动排好的中文在我们看起来是一团糟。

如下代码数据:

1
2
3
4
5
6
7
var  data =[
         [ '1' , '啊' , '描述01' ],
         [ '2' , '波' , '描述02' ],
         [ '3' , '呲' , '描述03' ],
         [ '4' , '嘚' , '描述04' ],
         [ '5' , '咯' , '描述05' ]
     ];

为了立刻看到效果,我们通过sorters属性来为Ext.data.ArrayStore设置一个默认的排序方式,如下面的代码:

1
2
3
4
5
6
7
8
9
var  store =  new  Ext.data.ArrayStore({
data:data,
fields:[
    {name: 'id' },  //mapping:0 这样的可以指定列显示的位置,0代表第1列,可以随意设置列显示的位置
    {name: 'name' },
    {name: 'descn' }
],
sorters:[{property: "name" ,direction: "ASC" }]  //给定一个默认的排序方式
});

效果就是下面这样:
9e4877c8ace7f67d444307f577f205d6.jpg
解决办法如下代码,你可以把这段代码放到ext-all.js文件的最后,或者放到HTML页面的最上面,总之要在Ext初始化之后,实际代码调用之前执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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;
     };
};

现在来运行,效果如下:
32c270a58add1084facac15b2d5cb683.jpg
效果看起来不错。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值