【问题标题】:Sorting one column based on another column in ExtJs 4.1 grid根据 ExtJs 4.1 网格中的另一列对一列进行排序
【发布时间】:2012-05-13 19:22:48
【问题描述】:

我正在使用 ExtJs 4.1 框架。我有一个网格,它只显示一列(名称)。网格与具有两个字段(名称和排序顺序)的商店相关联。存储中的字段“名称”与网格的名称列相关联。我想根据商店中 SortOrder 字段中可用的值对名称列进行排序。我该如何实现这样的逻辑。

谢谢

【问题讨论】:

    标签: extjs4.1 extjs-grid extjs-stores


    【解决方案1】:

    另一种在标题点击时执行此操作的方法。

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

    【讨论】:

      【解决方案2】:

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

      ... 列: [{ 标题:'名称', 数据索引:'名称', 可排序:真, 获取排序参数:函数(){ 返回“排序顺序”; } ... }] ...

      因此,您可以覆盖 getSortParam() 方法(由 doSort() 使用),而不是覆盖 doSort()。

      【讨论】:

      • 这也为我解决了这个问题,但是您的其他引用字段(在这种情况下为 SortOrder)有自己的列,您可能需要给它一个不同的数据索引并覆盖它的 getSortParam 函数也。虽然不知道为什么......
      • 肯定好多了,因为它是一种公共方法。谢谢!
      【解决方案3】:

      你的意思是这样的:

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

      【讨论】:

      • 谢谢....想知道为什么他们没有将“doSort”放入 Ext.grid.column.Column 的文档中。为你 +1
      • 请注意,Ext.grid.column.Column.doSort() 是用于内部处理的私有方法,因此我们通常不建议使用。因此,在文档中它是不可见的,除非您专门搜索它或启用查看私有函数。
      猜你喜欢
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多