您好,欢迎访问一九零五行业门户网

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

我们在表中指定某列排序的时候,我发现排序的时候,中文并没有很好的按照规律排序,国际上都使用ascii码进行排序,而我们却拼音排序,ext自动排好的中文在我们看起来是一团糟。 如下代码数据: 1 2 3 4 5 6 7 var data =[ [ '1' , '啊' , '描述01' ], [ '2'
我们在表格中指定某列排序的时候,我发现排序的时候,中文并没有很好的按照规律排序,国际上都使用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}] //给定一个默认的排序方式
});
效果就是下面这样:
解决办法如下代码,你可以把这段代码放到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
            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;
    };
};
现在来运行,效果如下:
效果看起来不错。
其它类似信息

推荐信息