2013-07-19 2 views
1

фонRally сетки с пользовательской колонки визуализатора сортировки

При попытке выполнить сортировку столбца, который я использовал пользовательский визуализатор для ничего не происходит - он меняет род от ASC к DESC и назад и вперед, но порядок данных никогда не изменяется. Я предполагаю, что это связано с тем, что не существует определения того, как сортировать данные, которые я манипулировал с помощью настраиваемого средства визуализации, но я не могу найти способ добавить сортировщик или функцию сортировки в столбец.

Гол

Я делаю сетку, которую я хочу отсортировать по столбцу Parent. Я хочу сортировать его так, чтобы родительский элемент отображался чуть выше любого из его дочерних элементов (родительский элемент - это накопитель, а дети - это функции).

Идея

Для функций, поставить имя Родителя в родительской колонке. Для накопительных, поставить имя себя в родительском столбце и добавить класс к нему, который устанавливает

display: none; 

Затем, вы можете легко разобраться и у родителей, появляющихся прямо над детьми

Код

{ 
    text: 'Parent', 
    dataIndex: 'Parent', 
    renderer: function(value, meta, record) { 
     var ret = record.raw.Parent; 
     if (ret) { 
      return ret.Name; 
     } else { 
      meta.tdCls = 'invisible'; 
      return record.data.Name; 
     } 
    } 
}, 
+0

Я бы предложил поместить 'record.get ('Parent')' вместо использования 'record.raw.Parent'. –

ответ

1

Для конфигурации rallygrid убедитесь, что для свойства remoteSort, по умолчанию true, установлено значение false. Тогда вот конфигурация для столбца:

  {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; 
        } 
       } 
      },