2013-08-20 77 views
1

我有一個顯示缺陷的拉力賽網格。我想添加一個顯示缺陷已打開天數的列。SDK2:在拉力賽中排序自定義列

我知道可以通過在列配置中添加自定義渲染器來做到這一點,但我也想對此列進行排序。不幸的是,渲染器不改變列的排序。

我想我可以使用商店的convert()函數來創建一個新的虛擬列(在本例中爲openAgeDays),但我不知道如何從構造函數中做到這一點 - 我假設我對storeConfig做了一些更改?

有沒有人有如何使用轉換函數(假設這是正確的方式來做到這一點)添加一個新的虛擬,可排序的列到拉力賽網格的例子?

  this.grid = this.add({ 
       xtype: 'rallygrid', 
       model: model, 
       disableColumnMenus: false, 
       storeConfig: [...] 
+1

[自定義列渲染排序拉力賽格(可能重複http://stackoverflow.com /問題/ 17755746 /漲勢併網與定製列渲染器排序) –

回答

1

由於是在重複的答案,你可以添加一個doSort到列:

 {dataIndex: 'Parent', name: 'Parent', 
      doSort: function(state) { 
       var ds = this.up('grid').getStore(); 
       var field = this.getSortParam(); 
       console.log('field',field); 
       ds.sort({ 
        property: field, 
        direction: state, 
        sorterFn: function(v1, v2){ 
         console.log('v1',v1); 
         console.log('v2',v2); 
         if (v1.raw.Parent) { 
          v1 = v1.raw.Parent.Name; 
         } else { 
          v1 = v1.data.Name; 
         } 

         if (v2.raw.Parent) { 
          v2 = v2.raw.Parent.Name; 
         } else { 
          v2 = v2.data.Name; 
         } 

         return v1.localeCompare(v2); 
        } 
       }); 
      }, 
      renderer: function(value, meta, record) { 
       var ret = record.raw.Parent; 
       if (ret) { 
        return ret.Name; 
       } else { 
        meta.tdCls = 'invisible'; 
        return record.data.Name; 
       } 
      } 
     },