2012-05-04 2 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 
        }); 
      } 
     } 
    } 
] 
Смежные вопросы