咱們在表格中指定某列排序的時候,我發現排序的時候,中文並無很好的按照規律排序,國際上都使用ASCII碼進行排序,而咱們卻拼音排序,Ext自動排好的中文在咱們看起來是一團糟。
以下代碼數據:html
var data =[ ['1','啊','描述01'], ['2','波','描述02'], ['3','呲','描述03'], ['4','嘚','描述04'], ['5','咯','描述05'] ];
爲了馬上看到效果,咱們經過sorters屬性來爲Ext.data.ArrayStore設置一個默認的排序方式,以下面的代碼:app
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初始化以後,實際代碼調用以前執行。ide
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; }; };
如今來運行,效果以下:
效果看起來不錯。
連載中,請你們繼續關注!本文出自個人我的網站思考者日記網網站