2012-05-04 39 views
7

我正在使用ExtJs 4.1框架。我有一个只显示一列(名称)的网格。网格与有两个字段(Name和SortOrder)的商店相关联。商店中的“名称”字段与网格的名称列关联。我想根据商店中SortOrder字段中的可用值对名称列进行排序。我怎样才能实现这样的逻辑。基于ExtJs 4.1网格中的另一列对一列进行排序

谢谢

回答

4

你的意思是这样的:

... 
columns: [{ 
    header: 'Name', 
    dataIndex: 'Name', 
    sortable: true, 
    doSort: function(state){ 
     var ds = this.up('tablepanel').store; 
     ds.sort({ 
      property: 'SortOrder', 
      direction: state 
     }); 
    } 
    ....  
}] 
+0

谢谢....想知道为什么他们没有把这个“doSort”放到Ext.grid.column.Column的文档中。 +1为你 – T1000

+1

请注意,Ext.grid.column.Column.doSort()是一种用于内部处理的私有方法,因此我们通常不推荐使用它。因此,在文档中它是不可见的,除非您专门搜索它或启用查看私人功能。 – Yetti

19

还有更简单一点的解决方案:

 
... 
columns: [{ 
    header: 'Name', 
    dataIndex: 'Name', 
    sortable: true, 
    getSortParam: function() { 
     return 'SortOrder'; 
    } 
... 
}] 
... 

所以不是覆盖doSort(的),你只需重写getSortParam()方法(由doSort()使用)。

+0

确认这适用于4.2.3 – Dave

+0

这应该是被接受的答案。 – bits

+0

这也为我解决了这个问题,但是您的其他被引用的字段(在这种情况下是'SortOrder')有自己的列,您可能需要给它一个不同的数据索引并重写它的'getSortParam'函数。不知道为什么...... – Sash

0

在标题点击上做到这一点的另一种方法。

columns: [ 
    { 
     header: 'Name', 
     dataIndex: 'Name', 
     listeners: { 
      headerclick: function() { 
       var store = this.up('grid').getStore(); 
       store.sort({ 
         property: 'SortOrder', 
         direction: this.sortState 
        }); 
      } 
     } 
    } 
] 
相关问题