Extjs 對dataIndex爲對象的column自定義升降序

最近發現如果dataIndex爲對象的column,column顯示內容是對象中某些屬性拼接出來的,則無法基於控件本身提供的默認升降序進行排序(我用的是extjs6)。

發現可以通過重寫column的sort函數來實現自定義升降序規則,這也適用於可以使用默認排序,但是因爲規則不同而想重寫的情況:

sort: function () {
                var ds = this.up('grid').getStore();
                var field = this.getSortParam();
                var state = (this.sortState === null ? 'ASC' : (this.sortState === 'ASC' ? 'DESC' : 'ASC'));
                ds.sort({
                    property: field,
                    direction: state,
                    sorterFn: function (v1, v2) {
                        v1 = v1.get(field);
                        v2 = v2.get(field);
                        return (v1.attr1 + v1.attr2).localeCompare(v2.attr1 + v2.attr2);
                    }
                });
            }

因爲我這是一個放在一個公共columnGrid中,所以獲取store的時候要先up下。

另外,this.getSortParam()是要拿到將要排序的column,也就是dataIndex的值,詳情可以看源碼。

還有,因爲剛開始沒有進行升降序,所以第一次拿到的sortState是null,要進行判斷並設置默認排序。而且下一次要給相反方向值。

之後重寫store對於這個field的排序規則,指定field,方向,和自定義排序規則。因爲屬性值都是string,所以這裏用了localeCompare。

有些思路來自於這裏:參考思路

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章